Jak podpiąć polecenie do formantu za pomocą obsługi poleceń

W poniższym przykładzie pokazano, jak podłączyć RoutedCommand element do elementu Control , który ma wbudowaną obsługę polecenia . Aby uzyskać kompletny przykład, który podłącza polecenia do wielu źródeł, zobacz przykład Create a Custom RoutedCommand Sample (Tworzenie niestandardowego routedCommand Sample ).

Przykład

Program Windows Presentation Foundation (WPF) udostępnia bibliotekę typowych poleceń, które programisty aplikacji napotykają regularnie. Klasy składające się z biblioteki poleceń to: ApplicationCommands, , NavigationCommandsComponentCommands, MediaCommands, i EditingCommands.

Obiekty statyczne RoutedCommand tworzące te klasy nie dostarczają logiki poleceń. Logika polecenia jest skojarzona z poleceniem za pomocą polecenia CommandBinding. Niektóre kontrolki mają wbudowane polecenia CommandBindings dla niektórych poleceń. Ten mechanizm umożliwia semantyka polecenia pozostaje taka sama, podczas gdy rzeczywista implementacja może ulec zmianie. Element TextBox, na przykład obsługuje Paste polecenie inaczej niż kontrolka przeznaczona do obsługi obrazów, ale podstawowa idea tego, co oznacza wklejenie, pozostaje taka sama. Logika poleceń nie może być dostarczana przez polecenie, ale musi być dostarczana przez kontrolkę lub aplikację.

Wiele kontrolek w WPF ma wbudowaną obsługę niektórych poleceń w bibliotece poleceń. TextBox, na przykład obsługuje wiele poleceń edycji aplikacji, takich jak Paste, Copy, Cut, Redoi Undo. Deweloper aplikacji nie musi wykonywać żadnych specjalnych czynności, aby te polecenia działały z tymi kontrolkami. TextBox Jeśli element jest obiektem docelowym polecenia, gdy polecenie jest wykonywane, będzie obsługiwać polecenie przy użyciu CommandBinding wbudowanej kontrolki.

Poniżej pokazano, jak użyć MenuItem jako źródła poleceń dla Paste polecenia, gdzie elementem TextBox docelowym polecenia jest . Cała logika definiująca sposób TextBox wykonywania wklejania jest wbudowana w kontrolkę TextBox .

Element MenuItem jest tworzony i właściwość Command jest ustawiona na Paste polecenie . Obiekt CommandTarget nie jest jawnie ustawiony na TextBox obiekt . Jeśli parametr CommandTarget nie jest ustawiony, elementem docelowym polecenia jest element, który ma fokus klawiatury. Jeśli element z fokusem Paste klawiatury nie obsługuje polecenia lub obecnie nie może wykonać polecenia wklejania (schowek jest pusty, na przykład), MenuItem wówczas będzie wyszaryzowany.

<Window x:Class="SDKSamples.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MenuItemCommandTask"
    >
    <DockPanel>
      <Menu DockPanel.Dock="Top">
        <MenuItem Command="ApplicationCommands.Paste" Width="75" />
      </Menu>
      <TextBox BorderBrush="Black" BorderThickness="2" Margin="25"
               TextWrapping="Wrap">
        The MenuItem will not be enabled until
        this TextBox gets keyboard focus  
      </TextBox>
    </DockPanel>
</Window>
// Window1 constructor
public Window1()
{
    InitializeComponent();

    // Instantiating UIElements.
    DockPanel mainPanel = new DockPanel();
    Menu mainMenu = new Menu();
    MenuItem pasteMenuItem = new MenuItem();
    TextBox mainTextBox = new TextBox();

    // Associating the MenuItem with the Paste command.
    pasteMenuItem.Command = ApplicationCommands.Paste;

    // Setting properties on the TextBox.
    mainTextBox.Text =
        "The MenuItem will not be enabled until this TextBox receives keyboard focus.";
    mainTextBox.Margin = new Thickness(25);
    mainTextBox.BorderBrush = Brushes.Black;
    mainTextBox.BorderThickness = new Thickness(2);
    mainTextBox.TextWrapping = TextWrapping.Wrap;

    // Attaching UIElements to the Window.
    this.AddChild(mainPanel);
    mainMenu.Items.Add(pasteMenuItem);
    mainPanel.Children.Add(mainMenu);
    mainPanel.Children.Add(mainTextBox);

    // Defining DockPanel layout.
    DockPanel.SetDock(mainMenu, Dock.Top);
    DockPanel.SetDock(mainTextBox, Dock.Bottom);
}
' Window1 constructor
Public Sub New()
    InitializeComponent()

    ' Instantiating UIElements.
    Dim mainPanel As New DockPanel()
    Dim mainMenu As New Menu()
    Dim pasteMenuItem As New MenuItem()
    Dim mainTextBox As New TextBox()

    ' Associating the MenuItem with the Paste command.
    pasteMenuItem.Command = ApplicationCommands.Paste

    ' Setting properties on the TextBox.
    mainTextBox.Text = "The MenuItem will not be enabled until this TextBox receives keyboard focus."
    mainTextBox.Margin = New Thickness(25)
    mainTextBox.BorderBrush = Brushes.Black
    mainTextBox.BorderThickness = New Thickness(2)
    mainTextBox.TextWrapping = TextWrapping.Wrap

    ' Attaching UIElements to the Window.
    Me.AddChild(mainPanel)
    mainMenu.Items.Add(pasteMenuItem)
    mainPanel.Children.Add(mainMenu)
    mainPanel.Children.Add(mainTextBox)

    ' Defining DockPanel layout.
    DockPanel.SetDock(mainMenu, Dock.Top)
    DockPanel.SetDock(mainTextBox, Dock.Bottom)
End Sub

Zobacz też