Silverlight 4:ContentTemplate背景更改

时间:2010-11-23 03:16:50

标签: silverlight templates datagrid silverlight-4.0 background

我的数据网格自定义标头有一个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>

谢谢

1 个答案:

答案 0 :(得分:0)

我做了一个快速测试,它似乎不适用于tag approachImplicitStyleManager 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”样式。

我的假期即将开始,所以我希望这有所帮助。至少现在你知道问题所在。