以下は2つのxamlスニペットです。唯一の違いは、1つの例がウィンドウのビジュアルツリーに直接入力され、もう1つの例がDataContext
データテンプレートを適用して同じウィンドウを構築することです。
ビジュアルツリーコンテンツ/DataContext
<Window>
<Window.DataContext>
<local:MyType />
</Window.DataContext>
<DockPanel>
<DockPanel.CommandBindings>
<CommandBinding Command="ApplicationCommands.New"
CanExecute="OnCanExecuteNew"
Executed="OnExecuteNew"
/>
</DockPanel.CommandBindings>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<Button Command="ApplicationCommands.New"
Content="New"
/>
</ToolBar>
</ToolBarTray>
<ContentPresenter Content="{Binding SomeProperty}" />
</DockPanel>
</Window>
ビジネスオブジェクトのコンテンツとデータテンプレート
<Window>
<Window.Resources>
<DataTemplate DataType="{x:Type local:MyType}">
<DockPanel>
<DockPanel.CommandBindings>
<CommandBinding Command="ApplicationCommands.New"
CanExecute="OnCanExecuteNew"
Executed="OnExecuteNew"
/>
</DockPanel.CommandBindings>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<Button Command="ApplicationCommands.New"
Content="New"
/>
</ToolBar>
</ToolBarTray>
<ContentPresenter Content="{Binding SomeProperty}" />
</DockPanel>
</DataTemplate>
</Window.Resources>
<Window.Content>
<local:MyType />
</Window.Content>
</Window>
最初の例(ビジュアルツリーコンテンツとデータコンテキスト)は、デザイナーが2番目の例でコンパイル時エラーを発生させている間は期待どおりに機能します。デリゲートタイプ。「デザイナエラーにもかかわらず、ルーティングされたコマンドハンドラが実行されていることを確認した場所で、アプリケーションをローカルで実行する場合があります。他のPCでアプリケーションを実行しようとすると、アプリケーションは起動時にサイレントに失敗し、Windowsイベントログにxamlロードエラーログエントリが残ります。2番目のスニペットからコマンドバインディングを削除すると、デザイナーエラーがなくなり、アプリケーションはローカルと他のPCの両方で問題なく実行されます。
誰かが例外の原因と、テンプレート内でコマンドバインディングを指定する方法を説明してください。