meine Frage ist die gleiche wie in this post. Aber seit dieser alten Post seit vier Jahren keine Antwort mehr gibt, dachte ich, es gäbe vielleicht neue Einsichten darüber, warum das nicht so funktioniert, wie es sein sollte.Warum wird mein Stil nicht angewendet?
In meinen Fensterressourcen definiere ich einen einfachen Stil für eine TextBlock
. Der Stil hat kein x:Key
Attribut, so dass er auf alle TextBlock
Steuerelemente in meinem Fenster angewendet werden soll, die keinen eigenen Stil haben.
Dann erstelle ich eine ListView
mit einer GridView
als seine Ansicht definiert. Die ListView
hat vier Spalten definiert, zwei Spalten sind mit einer expliziten CellTemplate
definiert, die eine TextBlock
enthält und zwei Spalten sind ohne eine explizite CellTemplate
definiert.
Hier ist meine komplette XAML-Code (die Frage folgt unter dem Code):
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" SizeToContent="WidthAndHeight">
<Window.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="TextTrimming" Value="CharacterEllipsis" />
<Setter Property="Background" Value="Aqua" />
</Style>
<Style x:Key="ListViewItemStyle" TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</Window.Resources>
<ListView ItemContainerStyle="{StaticResource ListViewItemStyle}">
<ListView.View>
<GridView>
<GridViewColumn Header="Bottom" Width="50" DisplayMemberBinding="{Binding Bottom}" />
<GridViewColumn Header="Left" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Left}" TextAlignment="Center" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Right" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Right}" TextAlignment="Right" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Top" Width="50" DisplayMemberBinding="{Binding Top}" />
</GridView>
</ListView.View>
<ListView.Items>
<Thickness>1,2,3,4</Thickness>
<Thickness>5,6,7,8</Thickness>
<Thickness>9,10</Thickness>
</ListView.Items>
</ListView>
</Window>
Wenn ich diesen Code ausführen, kann ich sehen, dass meine TextBlock
Stil, das soll auf alle TextBlock
angewendet werden Controls, ist nur in den Spalten aktiv, die keine explizite CellTemplate
haben.
Warum ist das?
Wenn ich die visuelle Struktur inspizieren ich sehen kann, dass die Arbeitsspalten (die, die ohne ein CellTemplate
) aus einem TextBlock
mit meinem Stil angewendet gemacht, während die Säulen, die (nicht funktionieren die Ein mit ein CellTemplate
) sind aus einem ContentPresenter
mit einem TextBlock
innen, aber der TextBlock
hat keinen Stil überhaupt.
Vielen Dank für Ihre Erläuterungen zu diesem Thema. Ich denke, ich bleibe bei dem 'Text: Stil' und einem Stilattribut bei 'Textblock', das direkter ist. Und da ich es sowieso in jedes 'DataTemplate' schreiben muss ... – Nostromo