WPF - 修改MahappsMetro DataGrid样式

时间:2014-06-22 21:31:15

标签: c# wpf xaml mvvm mahapps.metro

我目前在WPF中使用MVVM,我在项目中安装了MahappsMetro。我想更改默认的DataGrid样式,而不会丢失MetroDataGrid样式的所有属性(来自MahappsMetro的DataGrid样式)。

我只想将一些触发器更改为IsMouseOver和IsSelected,我尝试这样做:

我在App.xaml中定义了这个样式

<Style x:Key="TransparentDataGrid" TargetType="{x:Type DataGrid}" BasedOn="{StaticResource MetroDataGrid}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGrid}">
                    <DataGrid>
                        <DataGrid.RowStyle>
                            <Style TargetType="{x:Type DataGridRow}">       
                                <Style.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Background" Value="Transparent" />
                                    </Trigger>
                                    <Trigger Property="IsSelected" Value="True">
                                        <Setter Property="Background" Value="Transparent" />
                                        <Setter Property="Foreground" Value="Black" />
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </DataGrid.RowStyle>
                        <DataGrid.CellStyle>
                            <Style TargetType="{x:Type DataGridCell}">
                                <Style.Triggers>
                                    <Trigger Property="DataGridCell.IsSelected" Value="True">
                                        <Setter Property="Background" Value="Transparent" />
                                        <Setter Property="BorderBrush" Value="Transparent" />
                                        <Setter Property="Foreground" Value="Black" />
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </DataGrid.CellStyle>
                    </DataGrid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我绑定了这个Style,我需要它

    Style="{DynamicResource TransparentDataGrid}"

但我得到了例外:

A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll

我也试过了:

我在MainViewModel.xaml中创建了样式,但我不知道如何将此样式绑定到其他视图。

1 个答案:

答案 0 :(得分:1)

从控件的现有样式派生,您需要根据属性

将类型指定为键
<Style x:Key="TransparentDataGrid" TargetType="{x:Type DataGrid}" BasedOn="{StaticResource {x:Type MetroDataGrid}}">
    <Setter Property="Template">
        <Setter.Value>
        ...

如果上面的内容不起作用,那么请使用正确的命名空间前缀MetroDataGrid,例如mapp:MetroDataGrid,其中mapp指向MahappsMetro程序集

例如

<Application x:Class="CSharpWPF.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml"
         xmlns:mapp="clr-namespace:MahApps.Metro.Controls">
<Application.Resources>
     <Style x:Key="TransparentDataGrid" TargetType="{x:Type DataGrid}" BasedOn="{StaticResource {x:Type mapp:MetroDataGrid}}">
         <Setter Property="Template">
             <Setter.Value>
              ...
</Application.Resources>

使用上面正确的程序集只是一个例子