全局样式在WPF中不起作用

本文关键字:不起作用 WPF 样式 全局 | 更新日期: 2023-09-27 17:54:36

为什么这个样式不能在WPF中工作?TextBlock应该是红色的,但它不是。它一直是黑色的。这只是发生当TextBlock是在一个模板。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="Red"></Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <ListView>
            <ListView.Items>
                <ListItem></ListItem>
            </ListView.Items>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock>Hallo</TextBlock>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>

全局样式在WPF中不起作用

模板中的隐式Styles仅限于从System.Windows.Controls.Control继承的控件,除非它们在Application.Resources中定义,因此要么给您的样式x:Key并显式地使用它:

<Window.Resources>
    <Style TargetType="TextBlock" x:Key="myTextBlockStyle">
        <Setter Property="Foreground" Value="Red"></Setter>
    </Style>
</Window.Resources>
<TextBlock Style="{StaticResource myTextBlockStyle}">Hallo</TextBlock>

或移动到Application.Resources

<Application.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="Red"></Setter>
    </Style>
</Application.Resources>

如果你想定义一个样式,并让它自动应用于该类型的所有控件(不需要手动指定每个控件的样式),你需要这样定义它。

<Style x:Key="{x:Type TextBox}" TargetType="TextBox">
        <Setter Property="IsUndoEnabled" Value="True"></Setter>
        <Setter Property="UndoLimit" Value="10"></Setter>
        <Setter Property="ContextMenu" Value="{StaticResource textContextMenu}"></Setter>
        <Setter Property="SpellCheck.IsEnabled" Value="True"></Setter>
    </Style>