WPF Einige Stile, die nicht auf DataTemplate-Steuerelemente angewendet werden
Ich versuche etwas über WPF zu lernen und ich bin ziemlich erstaunt über seine Flexibilität.
Ich habe jedoch ein Problem mit getroffenStyle
s undDataTemplate
s, was ein bisschen verwirrend ist. Ich habe unten die Testseite definiert, um ein bisschen mit Styles usw. herumzuspielen und festgestellt, dass dieStyle
s definiert in<Page.Resources>
zumBorder
undTextBlock
werden in der nicht angewendetDataTemplate
, aberStyle
zumProgressBar
genau so definiert wird angewendet.
Quellcode (ich benutze nur Kaxaml und XamlPadX, um das Ergebnis zu sehen)
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="Background" Value="SkyBlue"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickne,ss" Value="2"/>
<Setter Property="CornerRadius" Value="5"/>
</Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontWeight" Value="Bold"/>
</Style>
<Style TargetType="{x:Type ProgressBar}">
<Setter Property="Height" Value="10"/>
<Setter Property="Width" Value="100"/>
<Setter Property="Foreground" Value="Red"/>
</Style>
<XmlDataProvider x:Key="TestData" XPath="/TestData">
<x:XData>
<TestData xmlns="">
<TestElement>
<Name>Item 1</Name>
<Value>25</Value>
</TestElement>
<TestElement>
<Name>Item 2</Name>
<Value>50</Value>
</TestElement>
</TestData>
</x:XData>
</XmlDataProvider>
<HierarchicalDataTemplate DataType="TestElement">
<Border Height="45" Width="120" Margin="5,5">
<StackPanel Orientation="Vertical" Margin="5,5" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Center" Text="{Binding XPath=Name}"/>
<ProgressBar Value="{Binding XPath=Value}"/>
</StackPanel>
</Border>
</HierarchicalDataTemplate>
</Page.Resources>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
<Border Height="45" Width="120" Margin="5,5">
<StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Center" Text="Item 1"/>
<ProgressBar Value="25"/>
</StackPanel>
</Border>
<Border Height="45" Width="120" Margin="5,5">
<StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Center" Text="Item 2"/>
<ProgressBar Value="50"/>
</StackPanel>
</Border>
</StackPanel>
<ListBox Margin="10,10" Width="140" ItemsSource="{Binding Source={StaticResource TestData}, XPath=TestElement}"/>
</StackPanel>
</Page>
Ich vermute, es hat etwas mit Standardstilen usw. zu tun, aber mehr Rätsel ist, warum einigeStyle
s werden angewendet und manche nicht. Ich finde nirgendwo eine einfache Erklärung für das oben Genannte und möchte daher fragen, ob jemand so freundlich wäre, dieses Verhalten in Lamens-Begriffen mit möglichen Links zur technischen Beschreibung, d. H. Zu MSDN oder so, zu erklären.
Vielen Dank im Voraus für Ihre Unterstützung!