2013-08-16 2 views
4

DataGrid ComboBox 열의 ElementStyle을 변경하려고합니다. 컨트롤이 편집되고 있지 않을 때 실제로 스타일은 TextBlock 유형입니다. 다른 예에서와 같이 그래서, 나는 시도했다 :WPF의 DataGridComboBoxColumn에 대한 ElementStyle 오류

가 'TextBlock의'은 TargetType이의 유형과 일치하지 않습니다 :

<DataGridComboBoxColumn.ElementStyle> 
    <Style TargetType="TextBlock"> 
     <Setter Property="Background" Value="Green" /> 
    </Style> 
</DataGridComboBoxColumn.ElementStyle> 

을이 나의 DataGridComboBoxColumn 정의에 포함되는 경우,이 이상한 오류 메시지가 요소 'TextBlockComboBox'.

정확히 TextBlockComboBox은 무엇입니까? 또는 더 중요한 점은 으로 이동하려면 어떻게해야합니까? ComboBox 타겟팅은 아무 것도하지 않는 것 같습니다.

답변

2

ElementStyleComboBox이어야합니다. 우리는 작동하는 DataGrid의 두 가지 유형, 즉 DataGridRowDataGridCell을 가지고 있습니다. 첫 번째 줄은 두 번째 줄입니다. 따라서 기본적으로 모든 것은 DataGridCell이 아닌 TextBlock's 인 셀로 구성됩니다.

다른 열의 유형을 확인하려면 DataGridTemplateColumn을 사용하십시오. 이 세트

<DataGridTemplateColumn Width="1.5*" IsReadOnly="False" Header="Position2"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ComboBox x:Name="ComboBoxColumn" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

제어 임의의 타입 일 수있다 : 따라서 DataGridComboBoxColumn는 아마로 정의된다. 귀하의 경우에는

, 당신은 DataGridCell의 스타일을 만들 필요가 :이 같은

<Style x:Key="StyleForCell" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Background" Value="Green" /> 
</Style> 

그리고 사용 :

<DataGridComboBoxColumn x:Name="ComboBoxColumn" 
         CellStyle="{StaticResource StyleForCell}" 
         Header="Position" 
         SelectedItemBinding="{Binding Position}" /> 
+1

'TemplateColumn'을 사용하는 것이므로, 답변으로 표시하겠습니다. 나는 왜 다른 코드가 나왔는지 정확히 이해하지 못한다. 하지만 한 가지 해결책은 내가 필요한 모든 것입니다 :) – Tekito

3

TextBlockComboBoxDataGridComboBoxColumn에 내부 유형입니다. 나는 또한 그 유형이 스타일 얻는 방법을 모르지만 TextBlock 유사한 당신이 보이는 ComboBox 스타일을 사용하여 DataGridComboBoxColumn.ElementStyle을 속일 수 : 나는 다른 곳에서 정의 세계적으로 정의 TextBlock 스타일을 사용 위의 스타일에서

<Style x:Key="TextBlockComboBoxStyle" 
     TargetType="{x:Type ComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ComboBox}"> 
       <TextBlock Text="{TemplateBinding Text}" 
          Style="{StaticResource {x:Type TextBlock}}" /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ComboBoxText 속성을 바인딩합니다. 마지막으로 당신과 같이 스타일을 사용할 수 있습니다

<DataGridComboBoxColumn ElementStyle="{StaticResource TextBlockComboBoxStyle}" 
         EditingElementStyle="{StaticResource {x:Type ComboBox}}" /> 

이 경우 EditingElementStyle 다시 다른 곳에서 정의 세계적으로 정의 ComboBox 스타일입니다.