2017-05-07 139 views
0

我有一個自定義的UserControl,我想將自定義屬性附加到一些包含的UI元素。XAML - 在自定義UserControl中定義附加屬性

我試圖做到這一點,但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> 

我的定製控件類看起來是這樣的:

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價值。

我該怎麼做?

+1

這並不是一個附加屬性聲明。請參閱[這裏](https://msdn.microsoft.com/en-us/library/ms749011(v = vs.110).aspx)它應該如何看起來像。 – Clemens

+1

除此之外,你可能很簡單的使用TabItem的Tag屬性來達到你的目的。 – Clemens

+0

現在我意識到,這和我寫的內容不可互換:)感謝您的幫助! – marcigo36

回答

0

你搞砸了一些事情。在你的情況,你應該宣佈擴展屬性,如

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