我目前在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中创建了样式,但我不知道如何将此样式绑定到其他视图。
答案 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>
使用上面正确的程序集只是一个例子