如何覆盖数据网格样式

时间:2016-07-08 10:09:49

标签: c# wpf datagrid styles

我有一个样式化的窗口,我希望将数据网格样式覆盖到我的应用程序中的所有数据网格

try (PrintWriter pwr = new PrintWriter(new BufferedWriter(new FileWriter(new FileOutputStream(csvFileIn), StandardEncodings.UTF_8)))) {
  pwr.println("Field1;Field2;Field3");
  pwr.println("Data1;Data2;Data3");
}

我觉得必须这样做但我必须申请

    <Window.Resources>          
    <Style x:Name="dtgStyle" 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="Blue" />
        </Trigger>

            <Trigger Property="IsSelected" Value="False">
                <Setter Property="Background" Value="Transparent" />
            </Trigger>
        </Style.Triggers>

        <Setter Property="Background" Value="Transparent" />
        <Setter Property="Foreground" Value="White" />

    </Style>
</Window.Resources>

现在我不想将其应用于所有dtgs。 最好的方法是自动将其应用于xaml。

感谢名单

--- ADD for ASh ----

感谢您的帮助。唯一的问题是当数据网格失去焦点时,数据网格中的选定行会改变颜色,如下图所示(前景变为黑色)。

enter image description here

我试图添加各种属性,但没有任何效果。

另外,左边框变得更大(没有双关语)和更大。 知道怎么解决吗? 感谢

1 个答案:

答案 0 :(得分:2)

如果您需要FrameworkElement的默认样式,请在没有x:Key的情况下声明它,仅使用TargetType。

DataGridRow和DataGridCell都具有IsSelected属性。仅仅为DataGridRow更改背景还不够,还必须为DataGridCell完成

<Style TargetType="{x:Type DataGrid}">
    <Setter Property="RowStyle" >
        <Setter.Value>
            <Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}">
                <Setter Property="Background" Value="Transparent" />
                <Setter Property="Foreground" Value="White" />

                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Transparent" />
                    </Trigger>

                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Orange" />
                        <Setter Property="Foreground" Value="White" />
                    </Trigger>
                </Style.Triggers>

            </Style>
        </Setter.Value>
    </Setter>

    <Setter Property="CellStyle">
        <Setter.Value>
            <Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Orange" />
                    </Trigger>

                    <DataTrigger Binding="{Binding IsKeyboardFocusWithin, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Value="False">
                        <Setter Property="Foreground" Value="White"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Setter.Value>
    </Setter>
</Style>

在此处找到了前景修复:DataGrid's selected row color when inactivehttps://stackoverflow.com/a/25204493/1506454