带有继承的UserControl不能使用属性绑定
本文关键字:属性 绑定 不能 UserControl 继承 | 更新日期: 2023-09-27 18:14:01
我试图将Page
的属性绑定到直接从Slider
继承的自定义Slider
控件(two - way)。它似乎不起作用,从TextBlock
的直接绑定工作得很好,但不是在我的Page
演示代码(摘录)
Page
Code
public sealed partial class MainPage : Page, INotifyPropertyChanged
{
private double _slidervalue;
public double SliderValue
{
get { return _slidervalue; }
set
{
this._slidervalue = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(nameof(SliderValue)));
}
}
XAML in my Page
<!-- doesnt work -->
<local:MyUserControl x:Name="myControl" Value="{Binding SliderValue, ElementName=page, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock FontSize="46" Text="{Binding SliderValue, ElementName=page}" />
<!-- works -->
<TextBlock FontSize="46" Text="{Binding Value, ElementName=myControl}" />
自定义Slider
就像我说的,它直接继承自Slider
。除此之外,它是不变的。
public sealed partial class MyUserControl : Slider
滑块XAML
(实际上有一个带有Template-Setter的样式,但即使是空的绑定也不起作用)
<Slider
x:Class="App1.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="40"
d:DesignWidth="200">
</Slider>
我也尝试使用DependencyProperty
代替PropertyChanged
-Event,但它也没有帮助。
这是一个Windows 10 UWP应用程序,对吗?在这种情况下,如果希望绑定到页面上的属性,则需要使用x: bind表示法,它使用页面本身作为数据上下文:
<local:MyUserControl x:Name="myControl" Value="{x:Bind SliderValue, Mode=TwoWay}" />