【问题标题】:Why doesn't my text block style get applied?为什么没有应用我的文本块样式?
【发布时间】:2012-04-19 15:08:09
【问题描述】:

我在我的 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>

【问题讨论】:

标签: wpf listview styles textblock


【解决方案1】:

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

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

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

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

【讨论】:

  • 文本块只有一种样式,在窗口资源中。
  • 嗯,也许在某处幕后定义了一个。我想不出任何其他原因。
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2020-07-02
  • 2013-04-10
相关资源
最近更新 更多