Почему эта простая команда WPF не работает? - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь добавить пользовательскую команду WPF в элемент управления.Что я сделал:

XAML :

<Window x:Class="H.I.S.windows.CommandTest"
        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:H.I.S.windows"
        mc:Ignorable="d"
        Title="CommandTest" Height="450" Width="800">
    <Window.CommandBindings>
        <CommandBinding Command="local:CustomCommand.Save" CanExecute ="SaveCommand_CanExecute"  Executed="SaveCommand_Executed" />
    </Window.CommandBindings>
    <Grid>
        <Button Command="local:CustomCommand.Save" Height="50" Width="100">Click me!</Button>
    </Grid>
</Window>

C # :

namespace H.I.S.windows
{

    public partial class CommandTest : Window
    {
        public CommandTest()
        {
            InitializeComponent();
        }
        private void SaveCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = true;
        }

        private void SaveCommand_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            MessageBox.Show("Saved");
        }
    }
    public static class CustomCommand
    {
        public static readonly RoutedUICommand Save = new RoutedUICommand(
            "Save",
            "Save",
            typeof(CustomCommand),
            new InputGestureCollection()
                {
                    new KeyGesture(Key.F2)
                }
            );
    }
}

Кнопка отключена(даже в режиме дизайна) и не позволяет пользователю нажимать на него.Я только что реализовал коды, описанные ЗДЕСЬ .Где я не прав?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Как @SirRufo предложил в комментариях к вопросу, проблема заключалась в том, что я объявил «CommandBindings» для всего окна WPF и кнопки внутри другого элемента управления.

Для этого случая есть 2 решения:

1: Объявление CommandBindings для прямого родителя кнопки.

2: Задайте имя для элемента управления, который связан с командой, и добавьте некоторый код, как показано ниже:

<Window ... x:Name = "windowName" ...>
<Window.CommandBindings>
        <CommandBinding Command="custumCommand:CustomCommands.Save" CanExecute ="CommandBinding_CanExecute"  Executed="CommandBinding_Executed" />
    </Window.CommandBindings>
<Grid>
<StackPanel>
<GroupBox>
<Button Command="custumCommand:CustomCommands.Save" CommandTarget = "{Binding ElementName=windowName}" Content="Save" />
</GroupBox>
</StackPanel>
</Grid>
</Window>

Посмотрите на " CommandTarget "атрибут Button.

0 голосов
/ 21 октября 2018

Код, который вы опубликовали, выдает мне ошибку из-за этого утверждения ниже,

  <Window.CommandBindings>
          <CommandBinding Command="local:CustomCommand.Save" CanExecute ="CommandBinding_CanExecute"  Executed="CommandBinding_Executed" />
  </Window.CommandBindings>

Он начал работать для меня после изменения его на ниже,

   <Window.CommandBindings>
    <CommandBinding Command="local:CustomCommand.Save" CanExecute ="SaveCommand_CanExecute"  Executed="SaveCommand_Executed" />
   </Window.CommandBindings>

СобытиеОбработчики в вашем программном коде отличаются от того, что есть в xaml для CommandBinding.

"SaveCommand_CanExecute" и "SaveCommand_Executed"

После изменения, как указано выше, он работает для меня, и я вижуокно сообщения с сообщением «Сохранено», когда я нажимаю, нажимает на него.

Надеюсь, вы не пропустили это.Если что-то еще останавливает вас, попробуйте проверить, нет ли каких-либо ошибок, и сообщите нам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...