2011-08-25 7 views
0

다음 xaml 코드가 있습니다.반복 스타일을 리소스 섹션으로 이동하는 방법은 무엇입니까?

<tk:DataGrid 
    ItemsSource="{Binding Path=Products}" 
    AutoGenerateColumns="False"> 
    <tk:DataGrid.Columns> 
     <tk:DataGridTextColumn 
        Header="Id"> 
      <tk:DataGridTextColumn.CellStyle> 
       <Style TargetType="{x:Type tk:DataGridCell}"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <TextBlock Margin="0,10" Text="{Binding Path=Id}" /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </tk:DataGridTextColumn.CellStyle> 
     </tk:DataGridTextColumn> 
     <tk:DataGridTextColumn 
        Header="Product"> 
      <tk:DataGridTextColumn.CellStyle> 
       <Style TargetType="{x:Type tk:DataGridCell}"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <TextBlock Margin="0,10" Text="{Binding Path=Name}" /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </tk:DataGridTextColumn.CellStyle> 
     </tk:DataGridTextColumn> 
    </tk:DataGrid.Columns> 
</tk:DataGrid> 

복사 붙여 넣기를 제거하려면 어떻게해야합니까? Text = "{Binding Path = XYZ}"가 작동하지 않기 때문에 리소스로 이동하는 직접적인 방법은 실패합니다.

답변

0

내가 원하는대로 할 수 있다고 생각하지 않습니다. 즉, 두 셀 모두에 대해 하나의 템플릿 정의가 있다고 생각합니다. 제공해야 DataGridTextColum를 사용하여,이 시간을하는 또 다른 방법,있다

<DataGrid ItemsSource="{Binding Path=Products}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="ID"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Margin="10,0" Text="{Binding Path=ID}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Name"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Margin="10,0" Text="{Binding Path=Name}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

그러나, XAML의 일부 라인을 취할 것 DataGridTemplateColumn을 사용하여 (그것은 DataGridTextColumn을 사용하고 어쨌든 그 컨트롤 템플릿을 덮어 조금 이상하다) 당신은 당신이 원하는 것에 너무 가깝습니다 :

<DataGrid Name="ui_datagrid" AutoGenerateColumns="False"> 
     <DataGrid.Resources> 
      <Style TargetType="{x:Type DataGridCell}"> 
       <Setter Property="Padding" Value="0,10"/> 
       <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.Resources> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
      <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
+0

대단히 고마워요! – vkrzv

관련 문제