2017-05-07 22 views
0

私はカスタムのUserControlを持っていますが、カスタムプロパティをいくつかのUI要素にアタッチしたいと思います。XAML - カスタムUserControlの添付プロパティの定義

私はこれを実現しようとしましたが、VSは自分のXAMLコードを受け入れませんでした。 MyPropが利用できない、またはアクセス可能であると表示されます。必要なときに、私は、その後、アクティブなタブのMyPropで値を読み出し、すべてのタブの値をバインドしたい

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) 
     ); 

} 

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

私のカスタムユーザーコントロールクラスは次のようになります。

どうすればいいですか?

+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"/> 
関連する問題