在 MaterialDesign 中选择后没有单元格边框的 DataGrid

DataGrid without cell border after selection in MaterialDesign

我在我的 WPF GUI 中使用数据网格,用户可以在其中双击一行以查看包含详细信息的页面(这很好用):

不幸的是,尽管我已经在使用选择单元 FullRow,但连续单击(一次)后单个单元格的边框将可见。我正在尝试不同的选项、颜色等,但每次显示边框时。我正在尝试 How to suppress DataGrid cell selection 中的步骤,但它只是更改了数据网格样式。

<DataGrid x:Name="DataGridMeasuringTasks" SelectionUnit="FullRow" Margin="20,145,0,44" 
   RowDetailsVisibilityMode="VisibleWhenSelected" CanUserAddRows="False"
   CanUserDeleteRows="False" HorizontalAlignment="Left" Width="1612" 
   SelectionMode="Single" IsReadOnly="True">
            
     <DataGrid.RowStyle>
         <Style TargetType="DataGridRow">
             <Setter Property="Background" Value="#FFF0F0F0" />
         </Style>
     </DataGrid.RowStyle>

     <DataGrid.Background>
         <SolidColorBrush Color="#FFF0F0F0"/>
     </DataGrid.Background>
</DataGrid>

如何去除边框?

数据网格单元格的 MaterialDesign 样式已定义 here。您必须复制和调整样式,因为边框画笔的触发器将优先于本地值。删除这部分。

<Trigger Property="IsKeyboardFocusWithin" Value="True">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesignTextBoxBorder}" />
</Trigger>

然后,将样式作为 CellStyle 分配给您的特定 DataGrid 或将其移动到范围内的资源字典甚至应用程序资源以自动将样式应用于范围内的所有单元格。

<DataGrid x:Name="DataGridMeasuringTasks" SelectionUnit="FullRow" Margin="20,145,0,44" 
   RowDetailsVisibilityMode="VisibleWhenSelected" CanUserAddRows="False"
   CanUserDeleteRows="False" HorizontalAlignment="Left" Width="1612" 
   SelectionMode="Single" IsReadOnly="True">
   
     <DataGrid.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Setter Property="Padding" Value="{Binding RelativeSource={RelativeSource Self}, Path=(materialDesign:DataGridAssist.CellPadding)}" />
            <Setter Property="Background" Value="Transparent" />
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
            <Setter Property="Foreground" Value="{Binding Foreground, RelativeSource={RelativeSource AncestorType=DataGridRow}}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Grid>
                            <Border
                                Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                SnapsToDevicePixels="True" />
                            <ContentPresenter Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
               <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="True" />
                        <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="False" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Background" Value="{DynamicResource MaterialDesignSelection}" />
                </MultiDataTrigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value=".56" />
                </Trigger>
            </Style.Triggers>
        </Style>
     </DataGrid.CellStyle>
            
     <DataGrid.RowStyle>
         <Style TargetType="DataGridRow">
             <Setter Property="Background" Value="#FFF0F0F0" />
         </Style>
     </DataGrid.RowStyle>

     <DataGrid.Background>
         <SolidColorBrush Color="#FFF0F0F0"/>
     </DataGrid.Background>
</DataGrid>

有一个更简单的答案:将您的数据网格的 MaterialDesignTextBoxBorder 设置为透明。

<DataGrid.Resources>
    <SolidColorBrush x:Key="MaterialDesignTextBoxBorder" Color="Transparent"/>
</DataGrid.Resources>

请注意,这仅适用于只读数据网格。如果您的单元格是可编辑的,material 设计文本框下方的行将不会显示(但当您编辑特定单元格时,我认为边框不是问题)。