访问WPF用户控件的子元素属性

问题描述:

比方说,我有几个孩子一个用户控件控制访问WPF用户控件的子元素属性

<UserControl x:Class="Any.AnyControl" 
    <Grid> 
     <Label Name="label1" Background="Black" /> 
     ... more controls here 
    </Grid> 
</UserControl> 

我用它在主窗口,如下所示:

<Window> 
    <Grid> 
     <local:AnyControl/> 
     // I want to access AnyControl label1 Background property here 
    </Grid> 
</Window> 

我知道我可以访问AnyControl LABEL1代码隐藏背景属性,但有什么办法可以在父XAML中访问它吗?

我现在的代码: 父XAML

<local:AlertControl LabelBackground="Blue">       
在用户控件

<Label Background="{Binding LabelBackground, RelativeSource={RelativeSource AncestorType=UserControl}}" /> 

以及与此太

<Label Background="{Binding LabelBackground, RelativeSource={RelativeSource AncestorType=local:AlertControl}}" /> 
+2

的用户控件应该公开的属性,比如'LabelBackground',对此标签的背景被绑定为'

+0

感谢您的回复。我仍然不知道如何在父XAML中以这种方式访问​​。请,你能举个例子吗? – hkhk

+0

像''。 LabelBackground应该是AnyControl中的依赖项属性,如重复问题所示。 – Clemens

试试这样的(虽然它不是最好的做法以在他们的父控制中控制风格):

<local:AnyControl> 
    <local:AnyControl.Resources> 
     <Style TargetType="{x:Type Label}"> 
      <Setter Property="Background" Value="Red" /> 
     </Style> 
    </local:AnyControl.Resources> 
</local:AnyControl> 

它为UserControl中给定类型的所有控件设置背景属性。如果你想改变它的名称选择的控制,你可以做这样的事情(变更Value="Test"到您的控件的名称):

<local:AnyControl> 
    <local:AnyControl.Resources> 
     <Style TargetType="{x:Type Label}"> 
      <Style.Triggers> 
       <Trigger Property="Name" Value="Test"> 
        <Setter Property="Background" Value="Red" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </local:AnyControl.Resources> 
</local:AnyControl> 
+0

感谢您的回复。是的,这应该可行,但我认为这太复杂了,所以最好用代码隐藏中的一行代码修改该属性。 – hkhk

+0

那么,你的问题是“我知道如何在代码隐藏中访问AnyControl label1背景属性,但是有什么方法可以在父XAML中访问它吗?”不是什么更好的做法... –

+0

我知道,你是对的,这就是为什么我把你的答案设置为答案。谢谢 – hkhk