2013-02-16 64 views
0

我做了一個用戶控件,並增加了新的特性是這樣的:
使用屬性在用戶控件

public partial class MyControl : UserControl 
{ 
    public static readonly DependencyProperty SelectedBrushProperty; 
    static MyControl() { 
     SelectedBrushProperty = DependencyProperty.Register("SelectedBrush", 
                  typeof(Brush), 
                  typeof(MyControl), 
                  new PropertyMetadata(Brushes.AliceBlue)); 
    } 

    public Brush SelectedBrush { 
     get { 
      return (Brush)GetValue(SelectedBrushProperty); 
     } 
     set { 
      SetValue(SelectedBrushProperty,value); 
     } 
    } 
    public MyControl() 
    { 
     InitializeComponent(); 
    } 
} 

我的問題是: 當我的自定義控件的XAML,我如何使用它?

+1

''..不知道你在這裏之後..你能擴展你的問題嗎? – Default 2013-02-16 17:28:03

回答

2

你可以綁定的財產在你控​​制的XAML:

<UserControl x:Class="MyNamespace.MyControl" ...> 
    <Grid> 
     <Label Background="{Binding SelectedBrush, 
      RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"/> 
    </Grid> 
</UserControl> 

如果您在MyControl的構造函數中設置DataContext = this;,你可以省略結合的RelativeSource

<Label Background="{Binding SelectedBrush}"/> 

請注意,不需要靜態構造函數。你可以這樣寫:

public static readonly DependencyProperty SelectedBrushProperty = 
    DependencyProperty.Register("SelectedBrush", typeof(Brush), typeof(MyControl), 
           new PropertyMetadata(Brushes.AliceBlue)); 
+0

完美,正是我所期待的! – Groulien 2013-02-16 18:53:35

+0

哇,我留下了深刻的印象,你從那個問題中挑選出來。順便說一句,不應該'AncestorType'是'MyControl',所以沒有找到任何'UserControl'? – Default 2013-02-18 11:34:26

+0

@Default AncestorType也可以是'local:MyControl',但這需要另一個XML名稱空間聲明,如'xmlns:local =「clr-namespace:MyNamespace」'。對我來說似乎沒有必要,因爲在祖先層次結構中沒有其他UserControl。 – Clemens 2013-02-18 11:49:32