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

C# XAML-在自定义UserControl中定义附加属性,c#,wpf,xaml,dependency-properties,attached-properties,C#,Wpf,Xaml,Dependency Properties,Attached Properties,我有一个自定义UserControl,我想将自定义属性附加到一些包含的UI元素 我试图这样实现它,但VS不接受我的XAML代码。 它说MyProp不可用,或者无法访问 <UserControl x:Class="mynamespace.MyDataSourceSelector" xmlns:local="clr-namespace:mynamespace" ... > <TabControl> <TabItem

我有一个自定义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>
我想为每个选项卡绑定一个值,然后在需要时读取活动选项卡的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"/>

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

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"/>


这不是附加的属性声明。看看它实际上应该是什么样子。除此之外,您可能只需要简单地使用TabItem的Tag属性就可以了。现在我意识到,这个和我写的东西是不能互换的:)谢谢您的帮助!这不是附加的属性声明。看看它实际上应该是什么样子。除此之外,您可能只需要简单地使用TabItem的Tag属性就可以了。现在我意识到,这个和我写的东西是不能互换的:)谢谢您的帮助!