我有一个标题样式,我的数据自定义标题。我使用主题作为我的应用程序。这里的问题是数据集的标题背景没有变化,但是当我移除样式时,标题背景没有问题,它会改变。
这是主题 这里是我的样本应用,右击网格和上下文菜单将显示为主题列表,选择不同的主题。我有两列,即有标题样式和没有标题样式。看到不同之处。谢谢你的帮助。
<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>谢谢
发布于 2010-12-08 07:47:53
我做了一个快速测试,它似乎既不适用于标记法,也不适用于ImplicitStyleManager属性法。这可能是因为样式设置器超出了范围,因此应用时没有主题。
建议1:看看Jet主题使用App.xaml中的资源字典处理它的方式,并尝试做一些类似的事情。(为此您将需要theme.xaml文件。编辑:这个链接可能有帮助。.)如果您想动态地更改主题,那么请考虑以下(旧的)关于在资源字典中交换主题的帖子(我还没有尝试过,但它应该可以工作)。
建议2:您需要考虑样式继承。因为"BasedOn“需要一个x:Key标记,所以您可以复制主题的隐式DataGridColumnHeader样式,并且只修改您感兴趣的部分。(我不知道是否有更优雅的方式。)
如果这不是您的意思,那么请提供更多的示例代码。
编辑2010-12-09
我查看了代码,我认为问题的根源是缺乏样式继承。您的"DataGridHeaderStyle“是说”不要使用普通的DataGridColumnHeader样式,而是在这个网格中使用这个TextBlock。“Silverlight就是这样做的:它在非样式的默认TextBlock中为您提供了一个样式化的DataGridColumnHeader。
证据:更新您的"Home.xaml“,并在您的"DataGridHeaderStyle”样式的第二列中,在当前TextBlock旁边添加一个TextBox。注意每次更改主题时,标题中的TextBox主题是如何变化的(查看TextBox背景),但是列标题的背景被固定在默认颜色上。正如我所说的,您的自定义样式告诉Silverlight忽略隐式样式。
FIX:我不知道如何在没有"x:Key“属性的情况下继承隐式样式。我在谷歌上搜索了不少,但找不到任何有用的东西。您要么必须为所有数据标记头创建自定义列定义样式,要么就必须在下一个版本的Silverlight中为Silverlight团队提供一个新功能。或者选择一个主题来坚持并编辑主题的隐式列标题样式的副本,作为新的"DataGridHeaderStyle“样式。
我的假期就要开始了,所以我希望这能有所帮助。至少现在你知道问题出在哪里了。
https://stackoverflow.com/questions/4252455
复制相似问题