2017-02-02 24 views
2

在我Application.ResourcesResourceDictionary的條目是,瘦身控件模板,類似於以下內容:從風格的RelativeSource結合的作品,但沒有控件模板

<ControlTemplate TargetType="{x:Type ToggleButton}"> 
    <Border> 
     <Border.BorderBrush> 
      <SolidColorBrush Color="{Binding Path=BorderColor, RelativeSource={RelativeSource AncestorType=UserControl}" /> 
     </Border.BorderBrush> 
    </Border> 
</ControlTemplate> 

每個UserControl都有自己的屬性BorderColor此從拉。在此示例中,綁定無法找到該屬性。

無法爲參考結合 '的RelativeSource FindAncestor,AncestorType =' System.Windows.Controls.UserControl找到源 ' AncestorLevel = '1''。

<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="BorderBrush" Value="{Binding Path=BorderColor, RelativeSource={RelativeSource AncestorType=UserControl}"/> 
</Style> 

如何解決在第一個例子中綁定:

然而,在字典中的另一個項目的工作?最好我想在用戶控件中的每個控件的實例上不需要額外的屬性。

回答

1

兩個建議:

如果控件模板是一個風格的一部分,您可以在切換按鈕的BorderBrush屬性與綁定設置爲SolidColorBrush並在模板中使用TemplateBinding

<Style x:Key="myStyle" TargetType="ToggleButton"> 
    <Setter Property="BorderBrush"> 
     <Setter.Value> 
      <SolidColorBrush Color="{Binding Path=BorderColor, RelativeSource={RelativeSource AncestorType=UserControl}}" /> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Border BorderBrush="{TemplateBinding Background}" BorderThickness="10"> 
        <TextBlock>....</TextBlock> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

如果您想要定義獨立的ControlTemplate出於某種原因解決方法將綁定到Brush屬性,而不是Color屬性:

<ControlTemplate TargetType="{x:Type ToggleButton}"> 
    <Border BorderBrush="{Binding Path=BorderBrushProperty, RelativeSource={RelativeSource AncestorType=UserControl}}" BorderThickness="10"> 
     <TextBlock>....</TextBlock> 
    </Border> 
</ControlTemplate> 
+0

我做了一些rejigging的模板,使其成爲一個'樣式'作爲第一個例子。然後使用'TemplateBinding'工作,謝謝!現在要動態更新... – Dan

0

它適用於如果您使用Background而不是BorderColor。 BorderColor是你自己的財產?

<Window.Resources> 
<ControlTemplate x:Key="template" TargetType="{x:Type ToggleButton}"> 
    <Border> 
     <Border.BorderBrush> 
       <SolidColorBrush Color="{Binding Path=Background,RelativeSource={RelativeSource AncestorType=UserControl}}" /> 
     </Border.BorderBrush> 
    </Border> 
</ControlTemplate> 
</Window.Resources> 

<UserControl Background="Aqua"> 
    <ToggleButton Template="{StaticResource template}"></ToggleButton> 

</UserControl> 
相關問題