2017-11-03 48 views
0

風格資源 如何避免採取在資源或資源字典定義有默認樣式組合框中的兒童在WPF

 <Setter Property="Background" Value="Red"/> 

    </Style>enter code here 
</Window.Resources> 

在窗口我加入了與孩子的標籤一組框定義。

<Grid> 
    <GroupBox Header="Header"> 
     <GroupBox.Resources> 

       <Style TargetType="{x:Type GroupBox}"> 
       <Setter Property="Background" Value="white"/> 
      </Style> 
     </GroupBox.Resources> 
     <Label Content="dsfdsfdsf" Foreground="Black" /> 
    </GroupBox> 
</Grid> 

我的預期結果是背景爲白色的標籤。但實際上它正在採取紅色背景

(即在資源的風格定義)如果我設置標籤的樣式,以明確是NULL,它工作正常

Label Content="dsfdsfdsf" Foreground="Black" Style={x:Null} 

而是控制到分組框動態添加,所以我要設置
Style={x:Null}到被添加到組框體

,如果我在Label標籤內容不設置正在添加到OverrideDefalutStyle真正的全兒童............... .......

Label Content="dsfdsfdsf" Foreground="Black" OverridesDefaultStyle="True" 
+0

有一個在WPF設計痛苦,我們不能像樣式我們用CSS3做的元素。在這種情況下,'Style'可以恰好指向***類型,即使派生類型也可以繼承該類型(例如:一種風格定位控件將不能應用於派生自Control的元素)。因此,對於您的場景,除非您事先知道所有類型的動態添加元素,否則您將不會使用純粹的XAML(沒有任何自定義附加屬性或使用代碼破解後)的優良解決方案。 –

回答

0

通過設置

<Style TargetType="{x:Type GroupBox}"> 
    <Setter Property="Background" Value="White"/> 
</Style> 

你將設置你的組框和組框本身爲白色內的所有GroupBox控制的背景。

所以,如果你想設置/覆蓋您的GroupBox內的所有標籤的背景如果你想重置Label的樣式屬性只是添加只需添加一個額外的樣式爲您的分組框定位Label

<Style TargetType="{x:Type Label}"> 
    <Setter Property="Background" Value="White"/> 
</Style> 

一個空的樣式定義您的GroupBox

<Style TargetType="{x:Type Label}"/> 

另一個方法是在你的使用上りSK :)

如果你只想要重置的背景顏色,你可以這樣做伎倆/黑客重置:

<Style TargetType="{x:Type Label}"> 
    <Setter Property="Background" Value="{Binding Background.DefaultValue, RelativeSource={RelativeSource Self}}" /> 
    <Setter Property="Foreground" Value="Black" /> 
</Style> 

提示:相反Background.DefaultValue的你也可以寫Background.ABC主要的事情在這裏是綁定出錯了。

0

GroupBox.Resources中的樣式對GroupBox本身沒有影響。隱含的GroupBox風格是它最接近VisualTree的祖先之一。你把這種風格放在錯誤的地方。

或者使用樣式屬性,而不是

<Grid> 
    <GroupBox Header="Header"> 
     <GroupBox.Style> 

       <Style TargetType="{x:Type GroupBox}"> 
       <Setter Property="Background" Value="white"/> 
      </Style> 
     </GroupBox.Style> 
     <Label Content="dsfdsfdsf" Foreground="Black" /> 
    </GroupBox> 
</Grid>