2017-06-20 91 views
0

我有一個簡單的用戶控件,它包含一個我修改過的按鈕。帶有嵌入式按鈕的Wpf用戶控件:更改按鈕的內容

當我將此用戶控件添加到我的主窗口時,我只能訪問usercontrol的屬性。我如何訪問按鈕內容?理想情況下,我想有一個自定義屬性讓我們說「TheText」,我改成了這樣

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

這是我在用戶控件「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)); 

但我是什麼應該把綁定?無法弄清楚。這是關注的按鈕。

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

「理想情況下,我想擁有一個自定義屬性」。做到這一點。在UserControl中聲明一個名爲TheText的依賴屬性,並將Button的內容綁定到該屬性。有關示例,請參見[這裏](https://stackoverflow.com/a/44649504/1136211)。 – Clemens

+0

您不需要新的依賴屬性,只需使用USerControl的現有'Content'屬性並將其綁定到UserControl XAML中的屬性即可。 '

+0

@Ed直到有另一個Button ... – Clemens

回答

1

的結合應該是這樣的:

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

注意正確的依賴項屬性聲明必須使用同名字的依賴項屬性和CLR包裝。還有一個約定將標識符字段命名爲<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)); 

你當然應該也使用string作爲一個類型被稱爲Text財產。或者你致電ButtonContent或類似的東西。

+0

@EdPlunkett太晚了,不過謝謝! ;) – user3673720