为什么我的文本块样式没有应用?



我在Windows资源区域中创建了一个样式:

<Style TargetType="TextBlock">
    <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
</Style>

我认为这意味着所有文本块都将具有这种样式,因此当我创建列表视图列时:

<GridViewColumn>
    <GridViewColumnHeader Content="Source"/>
    <GridViewColumn.CellTemplate>
         <DataTemplate>
             <TextBlock Text="{Binding Source, Mode=OneWay}" />
         </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

省略号样式不会应用于列中的文本块。

如果我用 x:Key 命名样式,然后使用 Style={StaticResource xxx} 那么它就可以工作了 - 为什么未命名的方法不起作用?

下面是完整的窗口 XAML:

<Window x:Class="ListViewStyle.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="TextTrimming" Value="CharacterEllipsis"/>
    </Style>
</Window.Resources>
<ListView ItemsSource="{Binding Rows}">
    <ListView.View>
        <GridView>
            <GridViewColumn>
                <GridViewColumnHeader Content="Source"/>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Source, Mode=OneWay}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn>
                <GridViewColumnHeader Content="Primary"/>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Primary, Mode=OneWay}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn>
                <GridViewColumnHeader Content="Secondary"/>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Secondary, Mode=OneWay}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>
</Window>

您可能正在定义另一种更接近TextBlock本身的TextBlock样式。

WPF 搜索样式的方式从要设置样式的项开始。如果它设置 Style 属性,则使用该属性。否则,它会使用找到的第一个样式检查父级的资源,然后检查其祖父级的资源,依此类推。如果在应用程序中找不到样式,则使用默认样式。

TextBlock的祖先之一中可能有一种TextBlock风格。如果它在那里找到一种样式,它将不会使用窗口级别的样式。

可以使用 BasedOn 属性指定一种样式基于另一种样式。

相关内容

  • 没有找到相关文章

最新更新