コンテキスト メニューをリソース ディクショナリとして設定しています (ユーザー コントロールにすることはできないため)。
<ResourceDictionary x:Class="Test.FooGridContextMenu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ContextMenu x:Key="FooGridContextMenu" ContextMenuOpening="OnContextMenuOpening">
</ContextMenu>
</ResourceDictionary>
そして私はそれをデータグリッドに使用します:
<DataGrid ContextMenu="{DynamicResource FooGridContextMenu}">...
コンテキスト メニュー リソースのコード ビハインドは次のとおりです。
using System;
using System.Windows;
using System.Windows.Controls;
namespace Test
{
public partial class FooGridContextMenu : ResourceDictionary
{
public FooGridContextMenu()
{
InitializeComponent();
}
void OnContextMenuOpening(object sender, ContextMenuEventArgs e)
{
Console.WriteLine("here i am");
}
}
}
問題:
1) イベント コールバック メソッドが呼び出されません。つまり、「Here i am」ログが表示されません。
2) オープニング イベントの複雑なロジックに基づいて、コンテキスト メニュー項目の一部を表示/非表示にするにはどうすればよいですか? 基本的に、イベント コールバックからデータ グリッドにアクセスして、選択した行を取得する方法を尋ねています。の設定方法は知っていますが、 にアクセスして選択したモデル/行を取得するVisibility
方法がわかりません。DataGrid
3)ResourceDictionary
行く道はここですか。最初に試したのですが、視覚的な親を持つことができないUserControl
と不平を言うContextMenu
ので、使用できないと思います。
助けてくれてありがとう!