2017-06-20 14 views
0

私は変更したボタン付きの簡単なユーザーコントロールを持っています。ボタンを埋め込んだWpfユーザーコントロール:ボタンの内容を変更する

メインコントロールにこのユーザーコントロールを追加すると、usercontrolのプロパティにのみアクセスできます。ボタンのコンテンツにはどのようにアクセスできますか?理想的には私は、カスタムプロパティはのは「TheText」を言わせて、私はこれは私がユーザーコントロール「MyButtonControl」

public object TheText 
     { 
      get => (object)GetValue(_text); 
      set => SetValue(_text, value); 
     } 
     public static readonly DependencyProperty _text = 
      DependencyProperty.Register("Text", typeof(object), typeof(MyButton), new UIPropertyMetadata(null)); 

しかし、私はアムに持っているものであること

<local:MyButtonControl TheText="My text here will be the button content"> 

ようにそれを変更したいのですが拘束力があると思われる?それを理解できません。ここに関連するボタンがあります。

<Button x:Name="button" Content="{Binding ??? }" Style="{StaticResource RoundedButton}"/> 
+0

"理想的には、カスタムプロパティが必要です。"正確にそれをしてください。 TheTextという名前の依存プロパティをUserControlに宣言し、Buttonのコンテンツをそのプロパティにバインドします。例については、[here](https://stackoverflow.com/a/44649504/1136211)を参照してください。 – Clemens

+0

新しい依存関係プロパティは必要ありません.USERControlの既存の 'Content'プロパティを使用して、UserControl XAMLのそれにバインドするだけです。 '

+0

@Edと言ってください。 – Clemens

答えて

1

バインディングは、次のようになります。正しい依存関係プロパティの宣言は、依存関係プロパティおよびCLRラッパーの両方に同じ名前を使用しなければならないこと

<Button Content="{Binding Text, 
    RelativeSource={RelativeSource AncestorType=UserControl}}" .../> 

注意。識別子フィールドには、<PropertyName>Propertyという名前を付けることもできます。

public object Text 
{ 
    get => (object)GetValue(TextProperty); 
    set => SetValue(TextProperty, value); 
} 

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register("Text", typeof(object), typeof(MyButton)); 

あなたは確かにもTextと呼ばれているプロパティの種類としてstringを使用する必要があります。または、プロパティーButtonContentなどを呼び出します。

+0

@EdPlunkettが遅すぎますが、とにかく感謝します! ;) – user3673720

関連する問題