Не удается разрешить привязку команд - PullRequest
1 голос
/ 09 декабря 2011

Я впервые изучаю WPF и XAML, и многое еще не понимаю.

Я работаю через это: http://www.codeproject.com/KB/WPF/AvalonDockMVVM.aspx

Я создал свой собственный проект и пытаюсь добавить в него код из AvalonDockMVVM.

В настоящее время я пытаюсь создать меню.

В MainWindow.xaml я добавил:

<Window.Resources>
    <RoutedUICommand x:Key="Commands.Exit" />
</Window.Resources>

<Window.CommandBindings>
    <CommandBinding Command="{StaticResource Commands.Exit}" Executed="Exit_Executed" />
</Window.CommandBindings>

<DockPanel>
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="_File">
            <MenuItem Header="_Exit" Command="{StaticResource Commands.Exit}" />
        </MenuItem>
    </Menu>
    ...
</DockPanel>

Идея состоит в том, чтобы создать меню с одной опцией «Выход».

Теперь, как я сказал, я едва знаю, что я делаю. Но мне кажется, что создает команду, связывает ее с методом ExitExecuted () в выделенном фрагменте кода, а говорит, что когда вы выбираете этот пункт меню, выполните все, что связано с этой командой.

Все работает нормально, в проекте AvalonDockMVVM. В моем случае я ставлю на ошибки {StaticResource Commands.Exit}: ресурс Commands.Exit не может быть разрешен.

Это заставляет меня думать, что где-то, в коде или в конфигурации, где-то, что определяет Commands.Exit, кроме элемента в XAML. Но я не могу его найти.

Есть ли что-то еще, что мне нужно сделать, чтобы привязать метод к меню через команду?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011

Я буквально скопировал приведенный выше пример в новый проект WPF, просто удалив эллипсы и добавив метод в коде для обработки команды выхода. Он работал нормально и не имел проблем с разрешением команды. Вот мой полный и полный XAML

<Window x:Class="WPFTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <RoutedUICommand x:Key="Commands.Exit" />
    </Window.Resources>

    <Window.CommandBindings>
        <CommandBinding Command="{StaticResource Commands.Exit}" Executed="Exit_Executed" />
    </Window.CommandBindings>
    <DockPanel>
        <Menu DockPanel.Dock="Top">
            <MenuItem Header="_File">
                <MenuItem Header="_Exit" Command="{StaticResource Commands.Exit}" />
            </MenuItem>
        </Menu>
    </DockPanel>
</Window>

Есть два места, где я бы искал проблемы с разрешением ресурса. Во-первых, проверьте, есть ли у вас статический ресурс на уровне проекта, определенный с ключом «Commands.Exit» на нем (или другой ресурс ниже по странице). Во-вторых, посмотрите, есть ли в коде выше или незамкнутый тег. Это должно вызвать ошибку разбора, но может нет?

0 голосов
/ 09 декабря 2011

попробуйте после удаления. в ключе ресурса .ie используйте <RoutedUICommand x:Key="CommandsExit" />

Я попробовал тот же код, который вы упомянули здесь, и он работает в VS2010 + .Net4.0. Можете ли вы открыть в Expression blend и увидеть проблему?

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