我的数据网格自定义标头有一个Header样式。我正在为我的应用程序使用主题。这里的问题是数据网格的标题背景没有改变,但是当我删除样式时,标题背景没有问题,它会改变。
这是themes
这是我的sample application,右键单击网格和上下文菜单将显示主题列表,选择不同的主题。我有两列,标题样式,没有标题样式。看到不同。谢谢你的帮助。
<Style x:Key="DataGridHeaderStyle" TargetType="primitive:DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding}" Grid.Column="0" HorizontalAlignment="Left" />
<filter:DataGridColumnFilter Grid.Column="1" HorizontalAlignment="Right" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
谢谢
答案 0 :(得分:0)
我做了一个快速测试,它似乎不适用于tag approach或ImplicitStyleManager attribute approach。这可能是因为样式设置器超出了范围,因此无需主题即可应用。
建议1:查看Jet Pack theme在App.xaml中使用资源词典处理它的方式,并尝试做类似的事情。 (您将需要theme.xaml文件。编辑:This link might help。)如果您想动态更改主题,请考虑关于swapping themes in resource dictionaries的这篇(旧)帖子(我还没有尝试过) ,但它应该工作)。
建议2:你需要考虑样式继承。由于“BasedOn”需要一个x:Key
标签,您可以改为复制主题的隐式DataGridColumnHeader
样式,只修改您感兴趣的部分。(我不知道是否有更优雅的方式。)
如果这不是您的意思,请提供更多示例代码。
编辑[2010-12-09]:
我查看了代码,我相信问题的根源是没有样式继承。你的“DataGridHeaderStyle”说“不要使用普通的DataGridColumnHeader样式,而是在这个Grid中使用这个TextBlock。”所以Silverlight就是这样做的:它在一个没有样式的默认DataGridColumnHeader中为你提供了一个样式化的TextBlock。
证明:更新“Home.xaml”并在“DataGridHeaderStyle”样式的第二列中添加一个TextBox,旁边是当前的TextBlock。请注意每次更改主题时标题中TextBox的主题是如何更改的(查看TextBox背景),但列标题的背景卡在默认颜色上。就像我说的,你的自定义样式告诉Silverlight忽略隐式样式。
FIX:我不知道如何在没有“x:Key”属性的情况下继承隐式样式。我google了很多但找不到任何有用的东西。您将需要a)为所有数据网格标题创建自定义列定义样式,否则您将不得不b)在Silverlight的下一个版本中为Silverlight团队创建新功能。或者c)选择一个主题来坚持并编辑主题隐式列标题样式的副本作为新的“DataGridHeaderStyle”样式。
我的假期即将开始,所以我希望这有所帮助。至少现在你知道问题所在。