2010-11-23 74 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」樣式。

我的假期即將開始,所以我希望這有助於。至少現在你知道問題出在哪裏了。