WPF стиль данных - PullRequest
       7

WPF стиль данных

4 голосов
/ 16 февраля 2010

Я хочу стилизовать сетку данных WPF, и это кажется очень простым. Насколько я понимаю, у меня должен быть такой код:

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

Но мой вопрос ... где я могу разместить этот код и как сообщить сетке данных, чтобы использовать стиль, описанный выше?

С уважением, S

Ответы [ 4 ]

2 голосов
/ 16 февраля 2010

Поместите его в ресурс 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>
1 голос
/ 19 февраля 2010

Что касается «Типа DataGridColumnHeader не найден»: вам нужна вторая запись пространства имен xml, поскольку DataGridColumnHeader находится в пространстве имен System.Windows.Controls.Primitives. Вам нужно что-то вроде

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

, а затем сослаться на новое пространство имен в своем стиле, например

<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type dg:DataGridColumnHeader}" >
1 голос
/ 16 февраля 2010

Лучшее место для размещения стилей - в словаре ресурсов, на который есть ссылка в 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>

Использование определения в сетке данных (форматирование столбцов здесь, но должно работать и для заголовков):

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

Обратите внимание, что элемент внутри ячейки является TextBlock, поэтому вы можете использовать стиль с целевым типом TextBlock.

0 голосов
/ 16 февраля 2010

Стили обычно идут:

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

Используйте соответствующий контейнер, если он не входит в UserControl, вы можете использовать «Окно» или любой другой контейнер, в котором вы находитесь.

Также вам нужно сослаться на это в вашей таблице данных с помощью:

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