Silverlight嵌套属性

时间:2010-08-29 22:10:00

标签: silverlight silverlight-3.0

第一次控制 我可以使用名为UserNameLabel的DependencyProperty创建UserControl。然后,我可以在UserControl上将datacotext设置为relativesource self并在标记中填充属性。

...

       public String UserNameLabel
    {
        get { return (String)GetValue(UserNameLabelProperty); }
        set { SetValue(UserNameLabelProperty, value); }
    }

    // Using a DependencyProperty as the backing store for UserNameLabel.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty UserNameLabelProperty =
        DependencyProperty.Register("UserNameLabel", typeof(String), typeof(LoginControl), new PropertyMetadata());


     <Grid x:Name="LayoutRoot"> 
     <local:LabelTextBox Height="37" Margin="10,24,43,0" VerticalAlignment="Top" Label="{Binding UserNameLabel}"/>
 </Grid>

...

第二次控制 我还可以创建一个LabelTextBox控件,并使用类似的Label属性将relativesource self设置为它。

...

        public String Label
    {
        get { return (String)GetValue(LabelProperty); }
        set { SetValue(LabelProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Label.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty LabelProperty =
        DependencyProperty.Register("Label", typeof(String), typeof(LabelTextBox), new PropertyMetadata(String.Empty));

...

   <Grid x:Name="LayoutRoot">
    <TextBlock Height="17" VerticalAlignment="Top" TextWrapping="Wrap" Text="{Binding Label}"/>

但是,如果我想在第一个usercontrol中嵌套LabelTextBox,我似乎无法在LabelTextBox的Label属性上绑定到UserNameText属性。

这似乎是一种创建控件的逻辑方法,您可以在其中设置父控件或子控件的属性以设置子控件的属性。

请帮助我。

1 个答案:

答案 0 :(得分:0)

不,这不是一个好方法,您不应该假设您可以控制UserControl的任何公开可用属性,包括DataContext

当我想将元素的属性绑定到包含UserControl的属性时,我使用这种方法: -

 <Grid x:Name="LayoutRoot">
   <TextBlock Text="{Binding Parent.Label, ElementName=LayoutRoot}" />
 </Grid>

这使用ElementName将绑定源设置为UserControl的Child。然后,属性路径中的Parent找到UserControl本身,之后我们可以绑定到所需的任何属性,在本例中为Label属性。

在这种方法中,您无需使用DataContext