Sdílet prostřednictvím


Postupy: Připojení příkazu k ovládacímu prvku pomocí podpory příkazů

Následující příklad ukazuje, jak připojit k, RoutedCommandControl který má integrovanou podporu pro příkaz. Kompletní ukázku, která připojí příkazy k více zdrojům, najdete v ukázce Vytvoření vlastní ukázky RoutedCommand .

Příklad

Windows Presentation Foundation (WPF) poskytuje knihovnu běžných příkazů, se kterými se programátoři aplikací setkávají pravidelně. Třídy, které tvoří knihovnu příkazů, jsou: ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommandsa EditingCommands.

Statické RoutedCommand objekty, které tvoří tyto třídy, nezadají logiku příkazu. Logika příkazu je přidružena k příkazu s parametrem CommandBinding. Některé ovládací prvky mají předdefinované commandBindings pro některé příkazy. Tento mechanismus umožňuje sémantiku příkazu zůstat stejná, zatímco skutečná implementace se může změnit. Například TextBoxzpracovává Paste příkaz jinak než ovládací prvek navržený pro podporu obrázků, ale základní myšlenka, co znamená vložit něco, co zůstává stejné. Logiku příkazu nelze zadat, ale musí ji zadat ovládací prvek nebo aplikace.

Mnoho ovládacích prvků ve WPF má integrovanou podporu některých příkazů v knihovně příkazů. TextBox, například podporuje mnoho příkazů pro úpravy aplikace, jako Pastejsou , Copy, Cut, Redoa Undo. Vývojář aplikací nemusí dělat nic zvláštního, aby tyto příkazy fungovaly s těmito ovládacími prvky. TextBox Pokud je cílem příkazu při spuštění příkazu, zpracuje příkaz pomocí CommandBinding integrovaného ovládacího prvku.

Následující příklad ukazuje, jak použít MenuItem jako zdroj příkazů pro Paste příkaz, kde TextBox je cílem příkazu. Veškerá logika, která definuje, jak TextBox se vložení provádí, je součástí TextBox ovládacího prvku.

Vytvoří MenuItem se a Command vlastnost je nastavená na Paste příkaz. Objekt CommandTarget není explicitně nastaven TextBox . CommandTarget Pokud není nastavena, cílem příkazu je prvek, který má fokus klávesnice. Pokud prvek s fokusem Paste klávesnice příkaz nepodporuje nebo nemůže spustit příkaz pro vložení (například schránka je prázdná), MenuItem bude zobrazen šedě.

<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

Viz také