为什么我的文本块样式不能应用?

时间:2012-04-19 15:08:10

标签: wpf listview styles textblock

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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