Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Меню в WPF  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1199
Извиняюсь за глупый наверное вопрос, в первый раз пробую WPF, писал на Delphi, пробовал чуть WinForms. Книжки по WPF пока не читал.
Делаю простое тестовое приложение в Visual C# 2010 Express. Кидаю с панели инструментов меню на форму, создаю в редакторе Items пункт File. У него в редакторе Items создаю пункт Close и задаю свойство Command - Close. Запускаю программу, этот пункт выглядит серым, как Disabled, на нажатие нет реакции. Создаю еще один Item в меню File - с ним то же самое. У обоих свойство IsEnabled=True (отмечено флажком в редакторе свойств).
Как сделать эти пункты меню действующими?
Вот кусок из XAML:
        <Menu Height="23" HorizontalAlignment="Left" Name="menu1" VerticalAlignment="Top" Width="45" IsMainMenu="True" IsEnabled="True">
            <MenuItem Header="File" IsEnabled="True">
                <MenuItem Command="ApplicationCommands.Close" IsEnabled="True" />
                <MenuItem Command="ApplicationCommands.Open" IsEnabled="True" />
            </MenuItem>
        </Menu>

В примере в MSDN на MenuItem по-моему так же.

К сообщению приложен файл. Размер - 11Kb
30 ноя 12, 13:30    [13555566]     Ответить | Цитировать Сообщить модератору
 Re: Меню в WPF  [new]
Местный король Делфей
Member

Откуда: Красная армия
Сообщений: 5109
CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, Close_Executed, Close_CanExecute));

public void Close_Executed(object sender, ExecutedRoutedEventArgs e)
{
   MessageBox.Show("Close");
}

public void Close_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
   e.CanExecute = true;
}
30 ноя 12, 13:49    [13555749]     Ответить | Цитировать Сообщить модератору
 Re: Меню в WPF  [new]
unknownfromrus
Member

Откуда:
Сообщений: 345
s62,

Я бы посоветовал почитать про Command.
Они отличаются от Delphi и Windows Forms.
И если время есть - сразу создай команды через ICommand - то есть вынеси отдельно создание RelayCommand и через него делай биндинг на свои команды (которые ты создашь во ModelView)
30 ноя 12, 14:02    [13555838]     Ответить | Цитировать Сообщить модератору
 Re: Меню в WPF  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1199
Местный король Делфей, Memberunknownfromrus,
спасибо. Немного прояснилось. Думал, что команды из списка (типа ApplicationCommands.Close) - это какие-то готовые процедуры (функции), но как понял на данный момент, это просто названия, а программный код, который будет выполняться по этой команде, нужно написать самому. Читаю MSDN про команды.
30 ноя 12, 14:42    [13556203]     Ответить | Цитировать Сообщить модератору
 Re: Меню в WPF  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1199
s62
а программный код, который будет выполняться по этой команде, нужно написать самому.

Ага, может быть так, что объект (который у нас CommandTarget) сам уже имеет реализацию команды, так что код писать не нужно, например Paste для TextBox.
30 ноя 12, 15:17    [13556522]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить