Читайте также:
|
|
Задача. Вы хотите создать собственные команды, специфичные для данного приложения.
Решение. Обычно команды сгруппированы в статических классах, чтобы к ним удобнее было обращаться. Определим две команды:
public class WpfTextEditorCommands
{
public static RoutedUICommand ExitCommand;
public static RoutedUICommand WordWrapCommand;
static WpfTextEditorCommands ()
{
InputGestureCollection exitInputs =
new InputGestureCollection();
exitlnputs.Add(new KeyGesture(Key.F4, ModifierKeys.Alt));
ExitCommand = new RoutedUICommand("Exit application",
"ExitApplication",
typeof(WpfTextEditorCommands), exitInputs);
WordWrapCommand = new RoutedUICommand("Word wrap", "Wordwrap",
typeof (WpfTextEditorCommands));
}
}
Теперь можно связывать эти команды с элементами управления и закреплять их за обработчиками событий:
public partial class Window1:Window
{
public Window1()
{
InitializeComponent();
// Создать обработчики для наших нестандартных команд
CommandBinding cmdBindingExit = new
CommandBinding (WpfTextEditorCommands.ExitCommand);
cmdBindingExit.Executed += new
ExecutedRoutedEventHandler(cmdBindingExit_Executed);
CommandBinding cmdBindingWordWrap = new
CommandBinding (WpfTextEditorCommands.WordWrapCommand);
cmdBindingWordWrap.Executed += new
ExecutedRoutedEventHandler(cmdBindingWordWrap_Executed);
this.CommandBindings.Add(cmdBindingExit);
this.CommandBindings.Add(cmdBindingWordWrap);
}
void cmdBindingWordWrap_Executed(object sender, ExecutedRoutedEventArgs e)
{
textBox.TextWrapping =
((textBox.TextWrapping == TextWrapping.NoWrap)?
TextWrapping.Wrap: TextWrapping.NoWrap);
}
void cmdBindingExit_Executed(object sender, ExecutedRoutedEventArgs e)
{
Application.Current.Shutdown();
}
}
Соберем все вместе с помощью XAML-кода:
<Window x:Class="WpfTextEditor.Windowl"
... >
<DockPanel Name="dockPanel1"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<Menu DockPanel.Dock="Top" Height="Auto">
<MenuItem Header="_Fi1e">
<MenuItem Header="_Exit"
Conmmand="local:Wpf TextEditor Commands.ExitCammand"/>
</MenuItem>
<MenuItem Header="_View">
<MenuItem Header="_Wordwrap" IsCheckable="True"
Name="menuItemWordwrap"
Command="local:Wpf TextEditorCommands.WordWrapCammand"/>
</MenuItem>
</Menu>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<CheckBox IsChecked="{Binding Mode=TwoWay,
ElementName=menuItemWordWrap, Path=IsChecked}"
Command="local:Wpf TextEditorCommands.WordWrapCammand">
<Image Source="Resources\WordWrap.png"
OpacityMask="White"/>
</CheckBox>
</ToolBar>
</ToolBarTray>
</DockPanel>
</Window>
Приложение почти готово. На разработку мы потратили минимум усилий и при этом познакомились с такими впечатляющими возможностями WPF, как связывание данных и реализация команд.
Дата добавления: 2015-08-13; просмотров: 72 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Триггер, который позволяет применять изменения, основанные на состоянии нескольких свойств. | | | Класс представления (View). |