带有继承的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,但它也没有帮助。

带有继承的UserControl不能使用属性绑定

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

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