CampDev
CampDev

Reputation: 1659

WPF - Modify MahappsMetro DataGrid style

I'm currently working with MVVM in WPF, I installed MahappsMetro in my project. I want to change the default DataGrid style, without losing all the properties of MetroDataGrid style (Style for DataGrid from MahappsMetro).

I simply want to change some Triggers as IsMouseOver and IsSelected, I tried doing this:

I defined this Style in 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>

And I bind this Style, where I need it

    Style="{DynamicResource TransparentDataGrid}"

But I get the exception :

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

Also I tried :

I created the style in MainViewModel.xaml but I don't know how to bind this style to other views.

Upvotes: 2

Views: 3148

Answers (1)

pushpraj
pushpraj

Reputation: 13679

to derive from existing style for the controls you need to specify the type as the key in based on attribute

<Style x:Key="TransparentDataGrid" TargetType="{x:Type DataGrid}" BasedOn="{StaticResource {x:Type MetroDataGrid}}">
    <Setter Property="Template">
        <Setter.Value>
        ...

if above does not work then do prefix with correct namespace to MetroDataGrid eg mapp:MetroDataGrid where mapp points to MahappsMetro assembly

eg

<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>

use the correct assembly above is just an example

Upvotes: 1

Related Questions