2016-09-26 3 views
1

Я пытаюсь добавить пользовательские команды в свой проект на C#. Для этого я добавил новый класс к моему проекту:XAML CommandBinding не существует в пределах локального пространства имен?

using System.Windows.Input; 

namespace DataBindingHuiswerk 
{ 
    public static class CustomCommands 
    { 
     public static readonly RoutedUICommand Add = new RoutedUICommand(
      "Add", 
      "Add", 
      typeof(CustomCommands), 
      new InputGestureCollection() 
      { 
       new KeyGesture(Key.F1, ModifierKeys.Control) 
      } 
     ); 

     public static readonly RoutedUICommand Change = new RoutedUICommand(
      "Change", 
      "Change", 
      typeof(CustomCommands), 
      new InputGestureCollection() 
      { 
       new KeyGesture(Key.F2, ModifierKeys.Control) 
      } 
     ); 

     public static readonly RoutedUICommand Delete = new RoutedUICommand(
      "Delete", 
      "Delete", 
      typeof(CustomCommands), 
      new InputGestureCollection() 
      { 
       new KeyGesture(Key.F3, ModifierKeys.Control) 
      } 
     ); 
    } 
} 

Далее я пытаюсь связать их в моем XAML коде:

<Window x:Class="DataBindingHuiswerk.MainWindow" 
     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:DataBindingHuiswerk" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <CommandBinding Command="local:CustomCommands.Add" Executed="AddCommand_Executed" CanExecute="AddCommand_CanExecute" /> 

Однако это возвращает меня:

название "CustomCommands" не существует в пространстве имен "CLR-имен: DataBindingHuiswerk"

Теперь я, вероятно, ошибаюсь, но для меня CustomCommands явно существует в пространстве имен DataBindingHuiswerk? Я что-то упускаю?

+0

«Возвращает меня» означает, что он не будет построен? –

+0

@EdPlunkett Нет, это означает, что мой проект говорит «Недопустимая разметка» и при наведении указателя мыши на подчеркнутую часть ошибки: 'Command =" local: CustomCommands.Add "' он возвращает это сообщение. – icecub

+0

Ahh. Будет ли он строить? –

ответ

2

Несколько вопросов в вашем коде.

Xaml должно быть таким.

<Window x:Class="WpfApplication1.MainWindow" 
     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:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.CommandBindings> 
     <CommandBinding Command="local:CustomCommands.Add" Executed="AddCommand_Executed" CanExecute="CommandBinding_OnCanExecute" /> 
    </Window.CommandBindings> 
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <Button Command="local:CustomCommands.Add">Add</Button> 
    </StackPanel> 
</Window> 

Код сзади должен быть таким.

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void AddCommand_Executed(object sender, ExecutedRoutedEventArgs e) 
    { 
     Debug.WriteLine("sdfgsdgdsgdf"); 
    } 

    private void CommandBinding_OnCanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = true; 
    } 
} 
+0

Ye Я знал эти части. Проблема была действительно ' 'отсутствует в xaml, как я указал в своем собственном ответе. Я буду отмечать ваши ответы, так что вопрос не останется без ответа. Большое спасибо :) – icecub

2

Оказалось, что я просто забыл обернуть <CommandBinding /> внутри <Window.CommandBindings />. Решение этой проблемы было:

<Window.CommandBindings> 
    <CommandBinding Command="local:CustomCommands.Add" Executed="AddCommand_Executed" CanExecute="AddCommand_CanExecute" /> 
</Window.CommandBindings> 

Обычно я бы удалил этот вопрос, потому что это просто опечатка, но (как Эд Планкетт правильно указал в комментариях) сообщение об ошибке вводит в заблуждение относительно того, что это действительно происходит. Поэтому я оставлю его нетронутым.

Смежные вопросы