属性绑定不与具有继承的UserControl一起使用

时间:2015-09-23 09:55:33

标签: c# xaml uwp

我尝试将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

中的XAML
<!-- 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 - 事件,但它也没有帮助。

1 个答案:

答案 0 :(得分:1)

这是Windows 10 UWP应用程序吗? 在这种情况下,如果要绑定到页面上的属性,则需要使用x:Bind表示法,它将页面本身用作数据上下文:

<local:MyUserControl x:Name="myControl" Value="{x:Bind SliderValue, Mode=TwoWay}" />