WPF某些样式未应用于DataTemplate控件 [英] WPF Some styles not applied on DataTemplate controls
问题描述
我正在尝试学习有关WPF的知识,其灵活性让我感到惊讶。
I am trying to learn something about WPF and I am quite amazed by its flexibility.
但是,我遇到了样式问题
和 DataTemplate
s,这有点令人困惑。我在测试页下面定义的
会使用一些样式等,并发现< Page.Resources>中定义的
Style
; 边框
和 TextBlock
的数据模板未应用在
DataTemplate中
,但应用 ProgressBar
的 Style
的方式完全相同。
However, I have hit a problem with Style
s and DataTemplate
s, which is little bit confusing.
I have defined below test page to play around a bit with styles etc and found that the Style
s defined in <Page.Resources>
for Border
and TextBlock
are not applied in the DataTemplate
, but Style
for ProgressBar
defined in exactly the same way is applied.
源代码(我只是使用Kaxaml和XamlPadX查看结果)
Source code (I just use Kaxaml and XamlPadX to view the result)
<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="BorderThickness" 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>
我怀疑这与默认样式等有关,但令人困惑的是为什么某些样式
适用,有些则不适用。我在上面的任何地方都找不到简单的解释,因此想问一问,是否有人会用拉姆斯的术语来解释这种行为,并可能链接到技术描述,例如MSDN等等。
I suspect it has something to do with default styles etc, but more puzzling is why some Style
s are applied and some not. I cannot find an easy explanation for above anywhere and thus would like to ask if someone would be kind enough to explain this behaviour in lamens' terms with possible links to technical description, i.e. to MSDN or so.
在此先感谢您的支持!
推荐答案
这实际上是设计使然。除非它们来自应用程序资源,否则不是从Control派生的元素将不会选择隐式样式。
This is actually by design. Elements that do not derive from Control will not pick up implicit Styles, unless they are in the application resources.
此链接对此进行了更详细的说明,或者您可以查看Connent 错误报告。
This link explains this in more detail, or you can view the Connent bug report.
这篇关于WPF某些样式未应用于DataTemplate控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!