我尝试将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)));
}
}
我的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
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
- 事件,但它也没有帮助。
答案 0 :(得分:1)
这是Windows 10 UWP应用程序吗? 在这种情况下,如果要绑定到页面上的属性,则需要使用x:Bind表示法,它将页面本身用作数据上下文:
<local:MyUserControl x:Name="myControl" Value="{x:Bind SliderValue, Mode=TwoWay}" />