Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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工具栏中的非活动命令_C#_Wpf_Toolbar_Routedcommand - Fatal编程技术网

C# wpf工具栏中的非活动命令

C# wpf工具栏中的非活动命令,c#,wpf,toolbar,routedcommand,C#,Wpf,Toolbar,Routedcommand,我有一个带有工具栏(添加和删除命令)和TabControl的应用程序。TabControl的每个tabItem中都有可变网格控件 请看图片: 禁用工具栏中的命令的情况很少: 应用程序运行时 当我点击DataGrid的灰色区域时 当DataGrid为空时 当选择DataGrid的任意一行时,工具栏的命令将变为活动状态 你能帮我解决这个问题吗?我应该设置哪些工具栏按钮的CommandTarget PS:我的应用程序中有两个可变网格。这就是为什么我不能将CommandTarget设置为“{Bindin

我有一个带有工具栏(添加和删除命令)和TabControl的应用程序。TabControl的每个tabItem中都有可变网格控件

请看图片:

禁用工具栏中的命令的情况很少:

  • 应用程序运行时
  • 当我点击DataGrid的灰色区域时
  • 当DataGrid为空时
  • 当选择DataGrid的任意一行时,工具栏的命令将变为活动状态

    你能帮我解决这个问题吗?我应该设置哪些工具栏按钮的CommandTarget


    PS:我的应用程序中有两个可变网格。这就是为什么我不能将CommandTarget设置为“{Binding ElementName=variableGrid}”。我认为应该设置为FocusedElement。但是我不知道怎么做。

    WPF应该每隔一段时间调用您的
    CanRemoveRow
    方法,检查是否可以删除一行。你应该在这个方法中加入一个布尔条件来回答这个问题。如果希望
    AddRowCommand
    具有类似的功能,请添加一个
    CanAddRow
    方法,在其中绑定
    AddRowCommand

    您可能需要阅读MSDN上的

    更新>>>

    哦。。。您想知道针对这些禁用条件使用什么代码吗?我想是这样的:

    应用程序运行时

    我猜你的意思是“当应用程序繁忙时”。。。添加名为
    IsBusy
    的布尔属性,当应用程序执行任何长时间运行的进程时将其设置为true,然后添加
    !IsBusy
    进入您的方法状态

    当我点击DataGrid的灰色区域时

    当DataGrid为空时

    通过添加
    和&DataGrid.SelectedItem!=null
    输入到方法条件中

    因此,您需要以下内容:

    private void CanRemoveRow(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = !IsBusy && SelectedItem != null);
    }
    

    这是正确的。AddRowCommand有这个默认方法,它总是返回true。在这种情况下(1,2,3),不会调用CanRemoveRow方法。这不适合我:我有几个网格,问题是我不知道如何将命令绑定到活动网格,这应该可以帮到你。
    public partial class VariableGrid : DataGrid, INotifyPropertyChanged 
    {
        public static RoutedCommand AddRowCommand = new RoutedCommand();
        public VariableGrid()
        {
            this.CommandBindings.Add(new CommandBinding(VariableGrid.AddRowCommand, AddRow)); 
            this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Delete, R    emoveRow, CanRemoveRow)); 
        }
    
        private void AddRow(object sender, ExecutedRoutedEventArgs e)
        {
            …
        }
        private void RemoveRow(object sender, ExecutedRoutedEventArgs e)
        {
            …
        }
    
        private void CanRemoveRow(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = (SelectedItems.Count > 0);
        }
    }
    
    private void CanRemoveRow(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = !IsBusy && SelectedItem != null);
    }