在WPF中的dataGridCells上设置填充

sg3maiej  于 2022-11-18  发布在  其他
关注(0)|答案(5)|浏览(293)

简单问题:如何在WPF中的dataGridCell上设置填充?(一次一个或所有单元格,我不在乎)
我尝试过在DataGridCell.Padding属性上添加一个setter来使用DataGrid.CellStyle属性,并以同样的方式使用DataGridColumn.CellStyle属性,但没有效果。
我还尝试使用DataGridColumn.ElementStyle属性,但没有成功。
我有点困在那里了,有人设法在dataGridCell上应用了填充吗?
NB:我会补充一点,我不能使用透明边框来实现这一点,因为我已经在其他地方使用了边框属性。我也不能使用margin属性(看起来很有效,令人惊讶的是),因为我使用了background属性,而且我不希望单元格之间有任何“空白”空间。

1rhkuytd

1rhkuytd1#

问题是Padding没有传输到DataGridCell模板中的Border。您可以编辑模板并为Padding添加模板绑定

<DataGrid ...>
    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="Padding" Value="20"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.CellStyle>
    <!--...-->
</DataGrid>
0tdrvxhp

0tdrvxhp2#

这里有一个更简洁的方法(我的观点),它结合了大卫的方法

<Resources>
    <Style x:Key="ColumnElementStyle" TargetType="TextBlock">
        <Setter Property="Margin" Value="5,0,10,0" />
    </Style>
</Resources>

那么......

<DataGridTextColumn ElementStyle="{StaticResource ColumnElementStyle}" />
<DataGridTextColumn ElementStyle="{StaticResource ColumnElementStyle}" />

(in我的情况下,我的行是只读的,因此没有EditingStyle)

qojgxg4l

qojgxg4l3#

大约5年后,由于这个问题似乎仍然有用(它仍然获得了支持),并且由于它已经被请求,下面是我在TextColumn上使用的解决方案(使用ElementStyle)(但您可以对任何类型的DataGridColumn执行相同的操作):
我在代码后面完成了这一切:

class MyTextColumn : DataGridTextColumn
{
    public MyTextColumn()
    {
        ElementStyle = new Style(typeof(TextBlock));
        EditingElementStyle = new Style(typeof(TextBox));

        ElementStyle.Setters.Add(new Setter(FrameworkElement.MarginProperty, new Thickness(3)));
        EditingElementStyle.Setters.Add(new Setter(Control.PaddingProperty, new Thickness(0, 1, 0, 1)));
    }
}

但是如果你想直接在xaml中做:

<DataGrid.Columns>
    <DataGridTextColumn>
        <DataGridTextColumn.ElementStyle>
            <Style TargetType="TextBlock">
                <Setter Property="Margin" Value="3"/>
            </Style>
        </DataGridTextColumn.ElementStyle>
        <DataGridTextColumn.EditingElementStyle>
            <Style TargetType="TextBox">
                <Setter Property="Padding" Value="0 1 0 1"/>
            </Style>
        </DataGridTextColumn.EditingElementStyle>
    </DataGridTextColumn>
</DataGrid.Columns>
n53p2ov0

n53p2ov04#

您也可以尝试更改

{Binding BindingValue, StringFormat={}{0:#0.0000}}

{Binding BindingValue, StringFormat={}{0:#0.0000 }}

有趣的是,WPF的XAML {0:#0.0000 }将在呈现的控件格式中荣誉这个额外的空格字符,以便将值移出网格列的边缘。

slsn1g29

slsn1g295#

<DataGrid.Columns>
      <DataGridTextColumn  MinWidth="100" Header="Changed by"  Width=""  Binding="{Binding Changedby}" IsReadOnly="True"  >
        <DataGridTextColumn.CellStyle>
          <Style TargetType="DataGridCell">
          <Setter Property="BorderThickness" Value="0"/>
          <Setter Property="Background" Value="Transparent" />
         <Setter Property="FrameworkElement.HorizontalAlignment"Value="Center"/>
          </Style>
      </DataGridTextColumn.CellStyle>
    </DataGridTextColumn>

相关问题