Почему мой стиль DataGrid сломался при обновлении с .NET 3.5 с WPF Toolkit до .NET 4.0? - PullRequest
0 голосов
/ 21 ноября 2010

Я только что преобразовал проект WPF из .NET 3.5 в .NET 4.0.

Теперь я использую элемент управления .NET 4.0 DataGrid вместо элемента управления WPF Toolkit DataGrid.Функционально все еще работает, но мои стили не применяются должным образом.

Как видно из снимков экрана ниже, форматирование чередующихся строк, отступы, полужирные заголовки и т. Д. Перестали работать.


До (сетка данных WPF Toolkit)

Screen capture of WPF Toolkit DataGrid

После (сетка данных .NET 4.0)

Screen capture of .NET 4.0 DataGrid


Вот весь мой словарь ресурсов.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="DataGrid_ColumnHeaderStyle" TargetType="DataGridColumnHeader">
        <Setter Property="FontWeight" Value="Bold" />
        <Setter Property="TextBlock.TextAlignment" Value="Center" />
        <Setter Property="TextBlock.TextWrapping" Value="WrapWithOverflow" />
    </Style>
    <Style x:Key="DataGrid_CellStyle" TargetType="DataGridCell">
        <Setter Property="Padding" Value="5,5,5,5" />
        <Setter Property="TextBlock.TextAlignment" Value="Center" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="DataGridCell">
                    <Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}">
                        <ContentPresenter />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style TargetType="DataGrid">
        <Setter Property="ColumnHeaderStyle" Value="{StaticResource DataGrid_ColumnHeaderStyle}" />
        <Setter Property="CellStyle" Value="{StaticResource DataGrid_CellStyle}" />
        <Setter Property="Background" Value="White" />
        <Setter Property="AlternatingRowBackground" Value="#F0F0F0" />
        <Setter Property="VerticalGridLinesBrush" Value="LightGray" />
        <Setter Property="HeadersVisibility" Value="Column" />
        <Setter Property="SelectionMode" Value="Single" />
        <Setter Property="SelectionUnit" Value="FullRow" />
        <Setter Property="GridLinesVisibility" Value="Vertical" />
        <Setter Property="AutoGenerateColumns" Value="False" />
        <Setter Property="CanUserAddRows" Value="False" />
        <Setter Property="CanUserDeleteRows" Value="False" />
        <Setter Property="CanUserReorderColumns" Value="True" />
        <Setter Property="CanUserResizeColumns" Value="True" />
        <Setter Property="CanUserResizeRows" Value="False" />
        <Setter Property="CanUserSortColumns" Value="True" />
        <Setter Property="IsReadOnly" Value="True" />
        <Setter Property="BorderBrush" Value="#DDDDDD" />
        <Setter Property="HorizontalGridLinesBrush" Value="#DDDDDD" />
        <Setter Property="VerticalGridLinesBrush" Value="#DDDDDD" />
    </Style>
    <Style x:Key="DataGrid_FixedStyle" TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}">
        <Setter Property="CanUserReorderColumns" Value="False" />
        <Setter Property="CanUserResizeColumns" Value="False" />
        <Setter Property="CanUserResizeRows" Value="False" />
        <Setter Property="CanUserSortColumns" Value="False" />
    </Style>
</ResourceDictionary>

Вот пример использования (обратите внимание, что стиль установлен на «DataGrid_FixedStyle»):

<DataGrid
    Style="{StaticResource DataGrid_FixedStyle}"
    Grid.Column="0" Foreground="Black"
    SelectedIndex="{Binding SelectedParticipantIndex, Mode=TwoWay}"
    ItemsSource="{Binding Participants}">
    <DataGrid.Columns>
        <DataGridTextColumn Foreground="Black" Header="Participant" Binding="{Binding ParticipantId}" />
        ....
    </DataGrid.Columns>
</DataGrid>

Примечание

Чтобы убедиться, что словарь ресурсов действительно используется, я добавил следующий установщик в <Style TargetType="DataGrid">...</Style>:

<Setter Property="FontSize" Value="24" />

Как видно из снимка экрана ниже, размер шрифта мультяшно большой, поэтому сам стиль определенно не игнорируется.Проблема в том, что многие настройки по какой-то причине не используются или не работают.

alt text


Есть какие-либо теории о том, что могло привести к поломке моих стилей?

1 Ответ

1 голос
/ 21 ноября 2010

Я думаю, что нашел виновника.В моем App.xaml я применяю тему «Aero», используя следующее объявление:

<ResourceDictionary
    Source="/PresentationFramework.Aero,
    Version=3.0.0.0,
    Culture=neutral,
    PublicKeyToken=31bf3856ad364e35,
    ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />

После этого я включаю словарь ресурсов, который выполняет дополнительные стили для DataGrid, используя следующее объявление:

<ResourceDictionary
    Source="/CommonLibraryWpf;component/ResourceDictionaries/DataGridResourceDictionary.xaml" />

Если я удаляю тему Aero, пользовательский стиль применяется правильно (хотя он теряет свой внешний вид Aero, поскольку я запускаю его на Windows XP).Эта проблема определенно не возникала в WPF 3.5.Я не уверен, что именно изменилось между .NET 3.5 и 4.0, что может привести к сбою.

Теперь мне просто нужно выяснить, как получить тему Aero и custom DataGrid стилизация для одновременной работы:)

Редактировать

Пожалуйста, посмотрите этот следующий вопрос .

...