예제 - wpf modern ui datagrid




WPF에서 dataGridCells에 패딩 설정 (4)

간단한 질문 : WPF에서 dataGridCell에 패딩을 설정하려면 어떻게해야합니까? (한 번에 하나씩 또는 모든 셀에 대해, 나는 상관하지 않는다)

DataGrid.CellStyle 속성에 setter를 추가하고 DataGridColumn.CellStyle 속성을 동일한 방식으로 사용하지 않고 DataGrid.CellStyle 속성을 사용하여 시도했습니다.

DataGridColumn.ElementStyle 속성을 더 이상 사용하지 DataGridColumn.ElementStyle 고 노력했습니다.

나는 거기에 달라 붙었는데, 누구든지 dataGridCell에 패딩을 적용 할 수 있었습니까?

NB : 테두리 속성을 이미 사용하고 있으므로 투명 테두리를 사용할 수 없습니다. 또한 배경 속성을 사용하고 내 셀 사이에 "빈"공간을 원하지 않기 때문에 여백 속성을 사용할 수 없습니다 (놀랍게도 효과가있는 것 같습니다).


거의 5 년 후,이 질문은 여전히 ​​사용 중일 것입니다. (여전히 upvotes를 얻고 있습니다.) 그리고 요청되었으므로, 여기 TextSize에 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>

너는 또한 변화를 시도 할 수 있었다.

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

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

흥미롭게도 WPF의 XAML {0 : # 0.0000}은 렌더링 된 컨트롤의 형식으로이 여분의 공백 문자를 사용하여 눈금 열의 가장자리에서 값을 이동시킵니다.


문제는 PaddingDataGridCell 의 Template에있는 Border 로 전송되지 않는다는 것입니다. 템플릿을 편집하고 Padding TemplateBinding을 추가 할 수 있습니다.

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

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







styling