c# - 命令绑定(bind) WPF

标签 c# wpf xaml namespaces

在我的简单应用程序中,我使用 CommandCommandBinding .
我的问题是,当我声明 Command在我的主窗口中是这样的:

<RibbonWindow x:Class="BooksDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:BooksDemo"
    mc:Ignorable="d"
    Title="MainWindow" Height="400" Width="600">

<Window.CommandBindings>
    <CommandBinding Command="Close" Executed="OnClose" />
    <CommandBinding Command="local:BooksCommands.ShowBooksList" />
</Window.CommandBindings> 

<Ribbon DockPanel.Dock="Top">
    <Ribbon.QuickAccessToolBar>
        <RibbonQuickAccessToolBar>
            <RibbonButton SmallImageSource="Images/one.png"
                          Command="local:BooksCommands.ShowBook"/>
            <RibbonButton SmallImageSource="Images/list.png" 
                          Command="local:BooksCommands.ShowBooksList"/>
        </RibbonQuickAccessToolBar>
    </Ribbon.QuickAccessToolBar>

    <Ribbon.ApplicationMenu>
        <RibbonApplicationMenu SmallImageSource="Images/books.png" >
            <RibbonApplicationMenuItem Header="Show _Book" />
            <RibbonSeparator />
            <RibbonApplicationMenuItem Header="Exit" Command="Close" />
        </RibbonApplicationMenu>
    </Ribbon.ApplicationMenu>

    <RibbonTab Header="Home">
        <RibbonGroup Header="Clipboard">
            <RibbonButton Command="Paste" Label="Paste"
                LargeImageSource="Images/paste.png" />
            <RibbonButton Command="Cut" SmallImageSource="Images/cut.png" />
            <RibbonButton Command="Copy" SmallImageSource="Images/copy.png" />
            <RibbonButton Command="Undo" LargeImageSource="Images/undo.png" />
        </RibbonGroup>
        <RibbonGroup Header="Show">
            <RibbonButton LargeImageSource="Images/one.png" Label="Book" />
            <RibbonButton LargeImageSource="Images/list.png" Label="Book List" />
            <RibbonButton LargeImageSource="Images/grid.png" Label="Book Grid" />
        </RibbonGroup>
    </RibbonTab>

    <RibbonTab Header="Ribbon Controls">
        <RibbonGroup Header="Sample">
            <RibbonButton Label="Button" />
            <RibbonCheckBox Label="Checkbox" />
            <RibbonComboBox Label="Combo1">
                <Label>One</Label>
                <Label>Two</Label>
            </RibbonComboBox>
            <RibbonTextBox>Text Box</RibbonTextBox>
            <RibbonSplitButton Label="Split Button">
                <RibbonMenuItem Header="One" />
                <RibbonMenuItem Header="Two" />
            </RibbonSplitButton>
            <RibbonComboBox Label="Combo2" IsEditable="False">
                <RibbonGallery SelectedValuePath="Content" MaxColumnCount="1"
                SelectedValue="Green">
                    <RibbonGalleryCategory>
                        <RibbonGalleryItem Content="Red" Foreground="Red" />
                        <RibbonGalleryItem Content="Green" Foreground="Green" />
                        <RibbonGalleryItem Content="Blue" Foreground="Blue" />
                    </RibbonGalleryCategory>
                </RibbonGallery>
            </RibbonComboBox>
        </RibbonGroup>
    </RibbonTab>



    <ListBox DockPanel.Dock="Left" Margin="5" MinWidth="120">
        <Hyperlink Click="OnShowBook">Show Book</Hyperlink>
    </ListBox>
    <TabControl Margin="5" x:Name="tabControl1">
    </TabControl>

</Ribbon>

它告诉我 BooksCommands命名空间中不存在。

在 BooksCommands 类中,我声明了命名空间:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace BooksDemo
{
  class BooksCommands
  {
    private static RoutedUICommand showBook;
    public static ICommand ShowBook
    {
        get
        {
            return showBook ?? (showBook = new RoutedUICommand("Show Book",
            "ShowBook", typeof(BooksCommands)));
        }
    }
    private static RoutedUICommand showBooksList;
    public static ICommand ShowBooksList
    {
        get
        {
            if (showBooksList == null)
            {
               showBooksList = new RoutedUICommand("Show Books","ShowBooks",
               typeof(BooksCommands));
               showBook.InputGestures.Add(new KeyGesture(Key.B,Modifierkeys.
               Alt));
            }
            return showBooksList;
        }
    }
}

这是 MainWindow.xaml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Controls.Ribbon;

namespace BooksDemo{
public partial class MainWindow : RibbonWindow
{
       public MainWindow()
    {
        InitializeComponent();

    }


    private void OnClose(object sender, ExecutedRoutedEventArgs e)
    {
        Application.Current.Shutdown();
    }
}
}

有人可以帮我吗。

最佳答案

  • 制作 BooksCommands类(class)公开。
  • 替换 <CommandBinding Command="local:BooksCommands.ShowBooksList" /><CommandBinding x:Key="CmdShowBooksListKey" Command="{x:Static local:BooksCommands.ShowBooksList}" />
  • 关于c# - 命令绑定(bind) WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35089107/

    相关文章:

    c# - Microsoft.Web.Administration - NullReferenceException 与 ApplicationHost.Config 中的 httpErrors

    c# - 绑定(bind) WebGrid 表单 AJAX

    c# - 用于重命名冲突默认值的 ProtoEnum 属性用法

    wpf - 在代码中创建上下文菜单

    c# - WPF SelectionChanged 为相同的值

    wpf:如何在运行时添加超链接?

    .net - 如何在自定义嵌套用户控件中引用另一个 XAML 元素?

    c# - 如何计算 c#/Code review 中两点之间的小时数

    c# - 如何在 Windows 应用商店应用程序中显示大量文本?

    c# - 绑定(bind)数据网格列宽