XAML - 在自定义 UserControl 中定义附加属性

XAML - Defining attached properties in custom UserControl

我有一个自定义 UserControl,我想将自定义属性附加到某些包含的 UI 元素。

我试过这样实现,但是VS不接受我的XAML代码。 它说 MyProp 不可用或不可访问。

<UserControl 
    x:Class="mynamespace.MyDataSourceSelector" 
    xmlns:local="clr-namespace:mynamespace" 
    ... >
    <TabControl>
        <TabItem Header="Tab1" local:MyDataSourceSelector.MyProp="something1"/>  
        <TabItem Header="Tab2" local:MyDataSourceSelector.MyProp="something2"/>
    </TabControl>
<UserControl>

我的自定义用户控件 class 看起来像这样:

public partial class MyDataSourceSelector: UserControl
{
    ...

    public string MyProp
    {
        get { return (string)GetValue(MyPropProperty); }
        set { SetValue(MyPropProperty, value); }
    }

    public static readonly DependencyProperty MyPropProperty 
        = DependencyProperty.Register(
            "MyProp", 
            typeof(string), 
            typeof(MyDataSourceSelector), 
            new PropertyMetadata(null)
        );

}

我想为每个选项卡绑定一个值,然后在需要时读出活动选项卡的 MyProp 值。

我该怎么做?

你搞砸了一些事情。在您的情况下,您应该声明扩展属性,例如

public static class TabItemExtensions
{
    public static void SetMyProp(TabItem element, string value)
    {
        element.SetValue(MyPropProperty, value);
    }

    public static string GetMyProp(TabItem element)
    {
        return (string)element.GetValue(MyPropProperty);
    }

    public static readonly DependencyProperty MyPropProperty
        = DependencyProperty.RegisterAttached(
            "MyProp",
            typeof(string),
            typeof(TabItemExtensions),
            new PropertyMetadata(null)
        );
}

并像

一样使用它
<TabItem Header="Tab1" local:TabItemExtensions.MyProp="something1"/>