Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF Datagrid行上下文菜单-禁用菜单项_C#_Wpf_Vb.net_Contextmenu_Wpfdatagrid - Fatal编程技术网

C# WPF Datagrid行上下文菜单-禁用菜单项

C# WPF Datagrid行上下文菜单-禁用菜单项,c#,wpf,vb.net,contextmenu,wpfdatagrid,C#,Wpf,Vb.net,Contextmenu,Wpfdatagrid,大家好,我是一个新手程序员,对WPF还不熟悉,我有一个简单的问题,但我花了相当长的时间来搜索它,但我无法找到它,所以我希望你们能帮助我。 我只想禁用Datagrid中上下文菜单中的菜单项。 例如:如果在Datagrid中选择了多行,请禁用上下文菜单项“属性” 请看下面的图片。命令可以通过实现CanExecute方法指示是否可以执行操作。按钮可以订阅CanExecuteChanged事件,如果CanExecute返回false,按钮将被禁用,如果CanExecute返回true,按钮将被启用 您可

大家好,我是一个新手程序员,对WPF还不熟悉,我有一个简单的问题,但我花了相当长的时间来搜索它,但我无法找到它,所以我希望你们能帮助我。 我只想禁用Datagrid中上下文菜单中的菜单项。 例如:如果在Datagrid中选择了多行,请禁用上下文菜单项“属性”

请看下面的图片。命令可以通过实现CanExecute方法指示是否可以执行操作。按钮可以订阅CanExecuteChanged事件,如果CanExecute返回false,按钮将被禁用,如果CanExecute返回true,按钮将被启用

您可以轻松地根据需要修改MSDN页面中的代码

<MenuItem x:Name="RowContMenuProp" Header="Properties"
          Command="local:ApplicationsCmd.ShowProperties"
          CanExecute="ShowPropertiesCanExecute"
          Executed="ShowPropertiesExecuted" >

这是一种方法。它有点脏,但能用

首先创建一个IValueConverter,表示1表示启用(true),值转换器可能如下所示

public class OneReturnsTrueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (int)value == 1;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
然后在DataGridRow中保存对DataGrid的引用

<DataGrid.RowStyle >
    <Style TargetType="{x:Type DataGridRow}">
        <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" />
        <Setter Property="ContextMenu" Value="{StaticResource DataRowContextMenu}" />
        <Setter Property="BorderThickness" Value="0"/>
    </Style>
</DataGrid.RowStyle>

最后将网格的SelectedItems计数绑定到IsEnabled属性

<DataGrid.Resources>
    <myConverters:OneReturnsTrueConverter x:Key="OneReturnsTrueConverter"/>
    <ContextMenu  x:Key="DataRowContextMenu">
        <MenuItem x:Name="RowContMenuProp"  Header="Properties"
                  DataContext="{Binding Parent.PlacementTarget.Tag , RelativeSource={RelativeSource Self}}"
                  IsEnabled="{Binding Path=SelectedItems.Count, Converter={StaticResource OneReturnsTrueConverter}}" />
    </ContextMenu>
</DataGrid.Resources>

public class OneReturnsTrueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (int)value == 1;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
<DataGrid.RowStyle >
    <Style TargetType="{x:Type DataGridRow}">
        <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" />
        <Setter Property="ContextMenu" Value="{StaticResource DataRowContextMenu}" />
        <Setter Property="BorderThickness" Value="0"/>
    </Style>
</DataGrid.RowStyle>
<DataGrid.Resources>
    <myConverters:OneReturnsTrueConverter x:Key="OneReturnsTrueConverter"/>
    <ContextMenu  x:Key="DataRowContextMenu">
        <MenuItem x:Name="RowContMenuProp"  Header="Properties"
                  DataContext="{Binding Parent.PlacementTarget.Tag , RelativeSource={RelativeSource Self}}"
                  IsEnabled="{Binding Path=SelectedItems.Count, Converter={StaticResource OneReturnsTrueConverter}}" />
    </ContextMenu>
</DataGrid.Resources>