2012-03-07 6 views
2

다음 WPF DataGrid 코드를 컴파일하려고하면 Visual Studio에서 ''MenuItem_Click '이 유효하지 않습니다.'클릭 '은' System.Windows.Controls.DataGridTextColumn '. "MenuItem_Click '이 (가) 유효하지 않습니다. 'Click'은 System.Windows.Controls.DataGridTextColumn의 이벤트가 아닙니다

<DataGrid x:Name="myDataGrid" ItemsSource="{Binding myItems}" AutoGenerateColumns="False"> 
     <DataGrid.ColumnHeaderStyle> 
      <Style TargetType="{x:Type DataGridColumnHeader}"> 
       <Setter Property="ContextMenu"> 
        <Setter.Value> 
         <ContextMenu> 
          <MenuItem Header="Header Text" Click="MenuItem_Click"/> 
         </ContextMenu> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </DataGrid.ColumnHeaderStyle> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="c1" Binding="{Binding C1}" /> 
      <DataGridTextColumn Header="c2" Binding="{Binding C2}" /> 
      <DataGridTextColumn Header="c3" Binding="{Binding C2}" /> 
     </DataGrid.Columns> 
    </DataGrid> 

클릭 처리기는 DataGridTextColumn이 아니라 MenuItem에 정의되어 있습니다. 이 클릭 핸들러를 사용하면 DataGrid가 손상되는 이유는 무엇입니까?

답변

7

<Style>이 새 XAML 이름 범위를 만들기 때문에 XAML에서 MenuItem_Click을 찾지 못합니다 (이름 범위에 대한 설명은 WPF XAML Namescopes 참조). XAML은 둘러싼 이름 범위 내에서만 이벤트 처리기 이름을 찾습니다.

<DataGrid x:Name="myDataGrid" ItemsSource="{Binding myItems}" AutoGenerateColumns="False"> 
    <DataGrid.Resources> 
     <ContextMenu x:Key="myContextMenu"> 
      <MenuItem Header="Header Text" Click="MenuItem_Click"/> 
     </ContextMenu> 
    </DataGrid.Resources> 
    <DataGrid.ColumnHeaderStyle> 
     <Style TargetType="{x:Type DataGridColumnHeader}"> 
      <Setter Property="ContextMenu" Value="{StaticResource myContextMenu}"/> 
     </Style> 
    </DataGrid.ColumnHeaderStyle> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="c1" Binding="{Binding C1}" /> 
     <DataGridTextColumn Header="c2" Binding="{Binding C2}" /> 
     <DataGridTextColumn Header="c3" Binding="{Binding C2}" /> 
    </DataGrid.Columns> 
</DataGrid> 
이 같은 리소스에 ContextMenu 이동 문제를 해결하기 위해

관련 문제