styling 예제 - WPF에서 dataGridCells에 패딩 설정




header style (5)

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

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

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

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

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


Answers

데이비드 (David)의 접근법을 결합한보다 깨끗한 방법 (제 의견)입니다.

<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}" />

(내 경우, 내 행은 읽기 전용이므로 EditingStyle은 없다.)


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


문제는 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>

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

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

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

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


바인딩 된 IEnumerable 목록을 변경하는 순간에 그리드를 업데이트하려면 INotifyCollectionChanged 를 구현하는 목록 유형으로 만듭니다. 이 데이터 형식은 http://msdn.microsoft.com/en-us/library/ms668604.aspx ( http://msdn.microsoft.com/en-us/library/ms748365.aspx )입니다. 따라서 재산을 다음과 같이 만들면

public ObservableCollection<TransactionDetail> TransactionDetailList
{
    get { return this._transactionDetailList; }

    set
    {
        this._transactionDetailList = value;
        RaisePropertyChanged("TransactionDetailList");                
    }
}

그리드는 목록에 추가하거나 제거한 항목을 자동으로 선택합니다.
실제로 여기에서하는 일은 목록 이 변경된 시점 (즉, 목록 참조)을 알리는 것이지만 목록 내용 이 변경된시기는 알려주지 않습니다.





wpf datagrid styling