2022年3月24日 星期四

[WPF] DataBinding-進階篇(二)UserControl自定義屬性的綁定

 MainWindow中要與UserControl自定義的屬性作綁定使用方法和基礎篇內的一樣,

分為使Code綁定或在XAML內綁定。

在UserControl內,需要將內部原件的屬性再與自定義的屬性作綁定。

MainWindow原件屬性<=>自定義屬性<=>UserControl原件屬性

利用上一篇創建的UserControl中,

Label1使用Code作屬性綁定,

Label2使用XAML作屬性綁定。

由於在WPF中的屬性綁定必須是DependencyProperty,

所以必須將自定義屬性LabelValue註冊為DependencyProperty。

註冊方法(命名原則=>屬性+Property):

    public object LabelValue
    {
        get => GetValue(LabelValueProperty);
        set => SetValue(LabelValueProperty, value);
    }

    public static readonly DependencyProperty LabelValueProperty =
        DependencyProperty.Register("LabelValue", typeof(object), typeof(UserControl1));

UserControl的Label1使用code綁定自定義屬性LabelValue

    public UserControl1()
    {
        InitializeComponent();
        Label1.SetBinding(ContentProperty, new Binding(nameof(LabelValue)) { Source = this });
        //上下為Binding的兩種建構式
        //DataContext = this;
        //Label1.SetBinding(Label.ContentProperty,nameof(LabelValue) );
    }

UserControl的Label2在XAML綁定自定義屬性LabelValue

    <Label x:Name="Label2"

        DataContext="{Binding RelativeSource={RelativeSource AncestorType=local:UserControl1}}"

        Content="{Binding LabelValue}"

        HorizontalAlignment="Stretch"

        Grid.Row="1" 

        VerticalAlignment="Stretch"

        VerticalContentAlignment="Center" 

        HorizontalContentAlignment="Center"

        FontSize="36" 

        Background="#FF60B646"

        Foreground="#FFFBF8F6"/>

執行結果:



沒有留言:

張貼留言