2011-12-08 49 views
1

我正在第一次探索WPF和XAML,還有很多我還不明白。無法解析CommandBinding

我通過這個工作: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> 

的想法是建立一個菜單,一個「退出」選項。

現在,正如我所說,我幾乎不知道我在做什麼。但它在我看來像<RoutedUICommand>正在創建一個命令,<CommandBinding>將它綁定到代碼隱藏中的ExitExecuted()方法,並且<MenuItem>是說當您選擇該菜單項時,執行不管什麼都綁定在那個命令上。

這一切工作正常,在AvalonDockMVVM項目。在我的{StaticResource Commands.Exit}中投注錯誤:無法解析資源Commands.Exit。

這讓我覺得除了在XAML中使用<RoutedUICommand>元素之外,在代碼或配置中還有某些地方會定義Commands.Exit。但是對我而言,我找不到它。

有什麼我需要做的,爲了將一個方法綁定到菜單,通過命令?

+0

我已經添加了更多他們的代碼 - 我已經添加了他們的MainWindowViewModel,準確地說。現在解決了。這讓我感到困惑不已。視圖模型中沒有與退出有關的任何內容。 –

回答

0

我從字面上將上面的例子複製到一個新的WPF項目中,僅僅刪除了省略號並在後面的代碼中添加了一個方法來處理exit命令。它運行得很好,解決命令沒有問題。這是我的整個,完整的,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」鍵(或另一個頁面下方的資源)。其次,查看代碼<RoutedUICommand>或<以上是否有代碼Window.Resources >有一個未關閉的標記。那應該吐出一個解析錯誤,但也許不是?

0

嘗試刪除後。在資源鍵中使用<RoutedUICommand x:Key="CommandsExit" />

我試過了你在這裏提到的相同的代碼,它在VS2010 + .Net4.0中工作。你可以嘗試在Expression Blend中打開並查看問題嗎?

+0

Key中的圓點在他們的項目中工作,所以它應該在我的工作。但我試了一下,並沒有奏效。 –