2011-04-19 3 views
17

DataGrid 열을 스타일이나 리소스로 선언 할 수 있습니까? 나는 같은 것을 할 싶습니다 :스타일 또는 리소스의 WPF DataGrid 열

<....Resources> 
    <DataGridColumns x:Key="dgcDataGridColumns"> 
     <DataGridTextColumn /> 
     <DataGridTextColumn /> 
    </DataGridColumns 
</....Resources> 

<DataGrid Columns="{StaticResource dgcDataGridColumns}" /> 

이유는 내가 4 가지 DataGrids에 대한 열 정의를 공유해야한다는 것입니다. 이것을 달성하기위한 어떤 방법이라도? 베스트는 뒤에 코드없이 것입니다!

+1

은 내가 Xceed DataGrid에 자원에 열을 정의 할 수 있습니다 알고 ... 그것은 DataGrid 구성 공급자에 따라 다릅니다 생각,하지만 난 다른 사람을 위해 모른다. 어느 쪽을 사용하고 있습니까? WPF 툴킷 하나? – Bruno

+0

.NET 4 WPF DataGrid를 사용하고 있습니다. – SACO

답변

20

열 속성은 더 세터가 없습니다. 그러나 다음과 같이 할 수 있습니다.

<Window.Resources> 

    <Controls:DataGrid x:Key="PersonDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding .}" x:Shared="False"> 
     <Controls:DataGrid.Columns> 
      <Controls:DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}" IsReadOnly="True"/> 
      <Controls:DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}" IsReadOnly="True"/> 
     </Controls:DataGrid.Columns> 
    </Controls:DataGrid> 

</Window.Resources> 

<StackPanel> 
    <ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Customers}"></ContentControl> 
    <ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Employees}"></ContentControl> 
</StackPanel> 
+0

좋아,이 트릭을 할 것으로 보인다. 하지만 ContentControl의 내용에 스타일을 적용 할 수 있습니까 (실제로 DataGrid로)? – SACO

+0

새 질문을 올리십시오. 의견에 답변하기가 어렵습니다. –

+0

http://stackoverflow.com/questions/5731276/wpf-contentcontrol-styling – SACO

4

나는 그런 상황에서 템플릿이나 스타일을 지정하지 않고 실제 Column 개체를 지정할 수 있다고 생각하지 않습니다. 나는 그런 식으로 공유 할 때 데이터 그리드가 잘 작동한다고 생각하지 않는다. "이 UIElement는 이미 다른 UIElement의 자식입니다"라는 범위에 대한 예외가 발생한다고 생각합니다.

그래서 나는 다음과 같은 것을 시도했다. 당신이 말하는 것과는 약간 달랐다.

{ " ''헤더와의 DataGridColumn 이미 데이터 그리드의 열 컬렉션 존재 DataGrids를가 열을 공유 할 수 없습니다 중복 열 인스턴스를 포함 할 수 없습니다 \ 연구 \ 이름 nParameter :.. 항목"}

그러나 나는이 예외를 가지고 이 XAML와

: 그것은 가능성이되지 않도록 데이터 그리드의

  <Grid.Resources> 
      <DataGridTextColumn x:Key="MyColumn" /> 
     </Grid.Resources> 
      <DataGrid> 
      <DataGrid.Columns> 
       <StaticResource ResourceKey="MyColumn" /> 
      </DataGrid.Columns> 
     </DataGrid> 

     <DataGrid> 
      <DataGrid.Columns> 
       <StaticResource ResourceKey="MyColumn" /> 
      </DataGrid.Columns> 
     </DataGrid> 
+1

질문에 답변을하지 않더라도 게시 해 주셔서 감사합니다. 예외 텍스트를 포함하면 필자가 필요한 대답을 찾는데 도움이되었습니다 (x : Shared = "False"). – Malachi

24

x : 공유는 MattS423의 예외 사항을 피하는 데 도움이됩니다.

<Window.Resources> 
    <DataGridTextColumn x:Key="dgtcFirstName" x:Shared="False" Header="First Name" Binding="{Binding FirstName}"/> 
    <DataGridTextColumn x:Key="dgtcSecondName" x:Shared="False" Header="Second Name" Binding="{Binding SecondName}"/> 
</Window.Resources> 

<Grid> 
    <StackPanel> 
     <DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid1" Width="200"> 
      <DataGrid.Columns> 
       <StaticResource ResourceKey="dgtcFirstName"/> 
       <StaticResource ResourceKey="dgtcSecondName"/> 
      </DataGrid.Columns> 
     </DataGrid> 
     <DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid2" Width="200"> 
      <DataGrid.Columns> 
       <StaticResource ResourceKey="dgtcSecondName"/> 
       <StaticResource ResourceKey="dgtcFirstName"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </StackPanel> 
</Grid> 

+1

동일한 복사 정의를 계속해서 복사하여 붙여 넣는 것을 피하는 훌륭한 해결책이었습니다. 나는 x : 공유가 intellisense에 나타나지 않지만, 똑같이 작동하지 않는다는 것을 이상하게 생각한다. – wangburger

+0

결코 새로운 것에 관해서 Shared on resources ... 여러 개의 DataGrid에 대해 DataGrid 컬럼을 재사용하는 것을 포함하여 여러 가지 문제를 해결한다. – TCC