2010-11-23 75 views
1

我的DataGrid自定义标题有一个标题样式。我正在为我的应用程序使用主题。这里的问题是datagrid的标题背景没有改变,但是当我删除样式时,标题背景没有问题,它改变了。Silverlight 4:ContentTemplate背景更改

这里的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

你是什么意思的“不变”? – Brian 2010-12-06 02:07:41

+0

颜色不会改变为我选定的主题风格,继承人的主题http://silverlight.codeplex.com/wikipage?title=Silverlight%20Toolkit%20Overview%20Part%203 – xscape 2010-12-06 09:34:53

回答

0

我做了一个快速测试,它似乎并不得为tag approachImplicitStyleManager attribute approach工作。这可能是因为样式设置器超出了范围,因此无需主题即可应用。

建议1:看看Jet Pack theme如何处理App.xaml中的资源字典,并尝试做类似的事情。 (你需要这个theme.xaml文件编辑:This link might help。)如果你想动态改变主题,那么考虑这个(旧)的帖子约swapping themes in resource dictionaries(我还没有尝试过,但它应该工作)。

建议2:你需要考虑风格的继承。由于“支持算法FMP”需要一个x:Key标签,你可以直接复制主题的含蓄DataGridColumnHeader风格,只修改您感兴趣的部分。(我不知道是否有一个更优雅的方式。)

如果不是你的意思,然后请提供更多示例代码。

EDIT [2010-12-09]:

我看了看代码,我相信这个问题的根源是没有风格的继承。你的“DataGridHeaderStyle”是说“不要使用普通的DataGridColumnHeader风格,而是在这个Grid中使用这个TextBlock”。因此,Silverlight就是这样做的:它为您提供了一个未格式化的默认DataGridColumnHeader中的样式化TextBlock。

证明:更新您的“Home.xaml”,并在当前TextBlock旁边的“DataGridHeaderStyle”样式的第二列中添加一个TextBox。请注意,每次更改主题(查看TextBox背景)时,标题中TextBox的主题都会发生变化,但列标题的背景会停留在默认颜色上。就像我所说的,您的自定义样式告诉Silverlight忽略隐式样式。

FIX:我不知道如何从没有“x:Key”属性的隐式样式继承。我搜索了一下,但找不到任何有用的东西。您将不得不a)为所有数据网格标题创建自定义列定义样式,否则您必须在Silverlight的下一个版本中为Silverlight团队提供新功能。或者c)选择一个主题来坚持并编辑主题的隐式列标题样式的副本,作为新的“DataGridHeaderStyle”样式。

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