2012-04-19 3 views
0

У меня есть стиль, созданный в моей области окна ресурсов:Почему мой стиль текстового блока не применяется?

<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> 
+0

Я знаю, что это старый вопрос, но сегодня был задан тот же вопрос, и ваш вопрос был связан с ним. Я предоставил ответ там, см. Http://stackoverflow.com/questions/40385905/why-doesnt-my-style-get-applied/40388383#40388383 –

ответ

0

Вы можете быть определением других TextBlock стиля, ближе к самим TextBlock.

Способ, которым стиль WPF ищет стиль, начинается с элемента, который нужно стилизовать. Если он устанавливает свойство Style, то он использует это. В противном случае он проверяет ресурсы родителя, ресурсы своего дедушки и т. Д., Используя первый найденный им стиль. Если он не находит стиль в вашем приложении, он использует стиль по умолчанию.

Возможно, существует TextBlock стиль в одном из предков TextBlock. Если он найдет стиль там, он не будет использовать тот, который находится на уровне окна.

Вы можете указать, что один стиль основан на другом, с собственностью BasedOn.

+0

Существует только один стиль для текстовых блоков, и это в ресурсах окна. – imekon

+0

Хм, может быть, где-то есть где-то за кулисами. Я не могу думать ни о какой другой причине. –

Смежные вопросы