簡體   English   中英

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>

我的自定義UserControl類看起來像這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM