无法将默认值向下传播到元素树的功能

时间:2019-12-03 17:29:58

标签: c# wpf

当我尝试在其简单的应用程序窗口中为所有控件设置字体大小时遇到​​一个奇怪的问题。一些控件从父窗口继承字体大小,而其他控件(菜单,StatusBar)则不继承。 我希望为窗口设置FontSize属性值将向下传播到元素树中。但是对于某些控件,它不起作用。

为什么?有什么解释吗?我的代码有任何错误吗?

注意:后面没有代码。

  

MainWindow.xaml

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="340" Width="300"
        FontSize="24" >

    <StackPanel>
        <Label Content="Hello! " />
        <Menu DockPanel.Dock="Top" Margin="10">
            <MenuItem Header="File"/>
            <MenuItem Header="Edit"/>
            <MenuItem Header="View"/>
            <MenuItem Header="Help"/>
        </Menu>
        <ListBox Margin="10">
            <ListBoxItem>Chapter 1</ListBoxItem>
            <ListBoxItem>Chapter 2</ListBoxItem>
        </ListBox>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
            <Button Margin="5" Padding="5" Content="Help"/>
            <Button Margin="5" Padding="5" Content="OK" />
        </StackPanel>
        <StatusBar Margin="10">
            <Label>Status Bar</Label>
            <Separator/>
            <Label>Zoom</Label>
            <ComboBox SelectedIndex="0">
                <ComboBoxItem>100%</ComboBoxItem>
                <ComboBoxItem>75%</ComboBoxItem>
                <ComboBoxItem>50%</ComboBoxItem>
                <ComboBoxItem>25%</ComboBoxItem>
            </ComboBox>
        </StatusBar>
    </StackPanel>
</Window>
  

在菜单和状态栏下面的图片上没有继承   字体大小:

enter image description here

1 个答案:

答案 0 :(得分:1)

某些WPF控件,例如MenuStatusBar以其默认样式显式设置FontSize属性。

Menu.xaml

<Style x:Key="{x:Type Menu}" TargetType="{x:Type Menu}">
    ...
    <Setter Property="FontSize"
        Value="{DynamicResource {x:Static SystemFonts.MenuFontSizeKey}}"/>
    ...
</Style>

这就是继承中断的原因。

如果显式设置了属性,它将不会继承值。

解决此问题的唯一方法是覆盖默认样式。