gpt4 book ai didi

wpf - MenuItem_Click' 无效。 'Click' 不是 'System.Windows.Controls.DataGridTextColumn 上的事件

转载 作者:行者123 更新时间:2023-12-04 21:55:53 25 4
gpt4 key购买 nike

当我尝试编译以下 WPF DataGrid 代码时,Visual Studio 提示“‘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>

Click 处理程序是在 MenuItem 上定义的,而不是在 DataGridTextColumn 上定义的。为什么使用此 Click 处理程序会破坏 DataGrid?

最佳答案

XAML 未找到 MenuItem_Click ,因为 <Style>创建一个新的 XAML 名称范围(有关名称范围的说明,请参见 WPF XAML Namescopes)。 XAML 仅在封闭的名称范围内查找事件处理程序名称。

为了解决这个问题,移动ContextMenu到一个资源,像这样:

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

关于wpf - MenuItem_Click' 无效。 'Click' 不是 'System.Windows.Controls.DataGridTextColumn 上的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com