2010-02-16 168 views
4

我想要樣式WPF數據網格,它似乎很容易。據我瞭解我必須有這樣的代碼如下:WPF datagrid樣式

<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type Custom:DataGridColumnHeader}" > 
<Setter Property="Background" Value="#88800080" /> 
    <Setter Property="Foreground" Value="White" /> 
</Style> 

但我的問題是..where做我把此代碼,我怎麼讓DataGrid中知道使用上面的風格?

問候, 小號

回答

2

把它放在XAML(局部或全局)的資源。最簡單的是把它在當前的XAML文件的本地資源:

<Page Name="SomeName" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type Custom:DataGridColumnHeader}" > 
     <Setter Property="Background" Value="#88800080" /> 
     <Setter Property="Foreground" Value="White" /> 
    </Style> 
    </Page.Resources> 
<!-- The rest of the xaml --> 
</Page> 
+0

如果我使用UserControl而不是Page? – MadSeb

+0

....

0

樣式通常去:

<UserControl.Resources> 
    <Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type Custom:DataGridColumnHeader}" > 
     <Setter Property="Background" Value="#88800080" /> 
     <Setter Property="Foreground" Value="White" /> 
    </Style> 
</UserControl.Resources> 

使用適當的容器,如果這不是你可以使用一個用戶控件內「 。窗口」或任何容器,你在

而且你需要引用它在你的數據網格:

<Custom:DataGrid ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}"/> 
0

下面的代碼似乎不適合我。我得到的錯誤消息是:「未找到類型DataGridColumnHeader。」。

<UserControl x:Class="myprogram.InfoView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:my="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    Height="500" Width="600" Loaded="UserControl_Loaded"> 

    <UserControl.Resources> 
     <Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type my:DataGridColumnHeader}" > 
      <Setter Property="Background" Value="#88800080" /> 
      <Setter Property="Foreground" Value="White" /> 
     </Style> 
    </UserControl.Resources> 


    <DockPanel LastChildFill="True"> 
........ 
    </DockPanel> 
</UserControl> 
1

放置樣式的最佳位置是在App.xaml中引用的資源字典中。

資源字典( 「StyleResources.xaml」 在這個例子中):

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="TextBlockRightAlign" TargetType="TextBlock"> 
     <Setter Property="HorizontalAlignment" Value="Right" /> 
    </Style> 
    <Style x:Key="TextBlockTitle" TargetType="TextBlock"> 
     <Setter Property="FontSize" Value="20" /> 
     <Setter Property="FontWeight" Value="Bold" /> 
    </Style> 
</ResourceDictionary> 

引用中的App.xaml風格詞典:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="StyleResources.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
     <ValueConverters:PriceConverter x:Key="PriceConverter"/> 
    </ResourceDictionary> 
</Application.Resources> 

在DataGrid(列格式使用的定義在這裏,但也應該用於標題):

<data:DataGridTextColumn Header="Charge" Width="100" 
     Binding="{Binding Charge, Mode=TwoWay, Converter={StaticResource PriceConverter}}" 
     ElementStyle="{StaticResource TextBlockRightAlign}" /> 

請注意,單元格內的元素是一個TextBlock,因此您可以使用具有目標類型TextBlock的樣式。

1

至於「未找到類型DataGridColumnHeader」:由於DataGridColumnHeader位於System.Windows.Controls.Primitives命名空間中,因此您需要第二個xml命名空間條目。您需要類似於

xmlns:dg="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit" 

然後在您的樣式中引用新的名稱空間,例如,

<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type dg:DataGridColumnHeader}" > 
+0

感謝... WPFToolkit的升級版本,它看起來像DataGridColumnHeader被分割到新的命名空間。 – Scott