属性 绑定不能与继承的 UserControl 一起使用
Property Binding not working with UserControl with inheritance
我正在尝试将 Page
的 属性 绑定到直接继承自 Slider
的自定义 Slider
控件 (TwoWay)。
它似乎不起作用,来自 TextBlock
的直接绑定工作得很好,但在我的 Page
中使用 属性 时就不行了
演示代码(节选)
Page
代码
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 在我的 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
(实际上有一个带有模板的样式-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}" />
我正在尝试将 Page
的 属性 绑定到直接继承自 Slider
的自定义 Slider
控件 (TwoWay)。
它似乎不起作用,来自 TextBlock
的直接绑定工作得很好,但在我的 Page
演示代码(节选)
Page
代码
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 在我的 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
(实际上有一个带有模板的样式-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}" />