2017-10-11 181 views
-2

比方說,我有幾個孩子一個用戶控件控制訪問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

回答

0

試試這樣的(雖然它不是最好的做法以在他們的父控制中控制風格):

<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