WPF button style not being applied to child element
我有这样的按钮样式
1 2 3 4 5 6 7 8 | <Style x:Key="NormalButtonStyle" TargetType="{x:Type Button}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Grid x:Name="ContentSite"> <Grid x:Name="ContainerGrid"> <ContentPresenter x:Name="Presenter" Style="{DynamicResource NormalButtonTextStyle}"/> ... |
ContentPresenter的样式在哪里
1 2 3 | <Style x:Key="NormalButtonTextStyle" BasedOn="{StaticResource DefaultFontStyle}"> <Setter Property="TextElement.Foreground" Value="{DynamicResource NormalTextOnDarkBackgroundBrush}" /> ... |
所以我就这样定义了我的按钮
1 2 3 4 | <Button Style="{StaticResource NormalButtonStyle}"> <Button.Content> <TextBlock Text="Cancel"/> ... |
但是TextBlock并没有以
我是否误解了样式如何应用于子元素? 我应该如何定义按钮,以便正确应用样式?
将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <Style x:Key="NormalButtonStyle" TargetType="{x:Type Button}"> <Setter Property="TextElement.Foreground" Value="{DynamicResource NormalTextOnDarkBackgroundBrush}" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Grid x:Name="ContentSite"> <Grid x:Name="ContainerGrid"> <ContentPresenter x:Name="Presenter" /> </Grid> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> |
请看看这个。"在这种情况下,正确的样式应位于ContentPresenter内部,在这种情况下,ContentPresenter不属于逻辑树。"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <Style x:Key="textBlockStyle" TargetType="TextBlock"> <Setter Property="Background" Value="Blue"/> </Style> <Style TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <ContentPresenter> <ContentPresenter.Resources> <Style TargetType="TextBlock" BasedOn="{StaticResource textBlockStyle}"/> </ContentPresenter.Resources> </ContentPresenter> </ControlTemplate> </Setter.Value> </Setter> </Style> |
其他答案可能是解决此问题的正确方法,但是不幸的是,样式已在大型应用程序中使用,因此我更喜欢只影响按钮的解决方案。 Parisa所关联的问题有所帮助; 我需要直接设置按钮的内容,以便文本的父项是ContentPresenter:
1 | <Button Content="Cancel" Style="{StaticResource NormalButtonStyle}"/> |