私は働いていないようなスタイルがあります。スヌープがListBoxItem
のDataContext
と言っているにもかかわらず、何も表示されません。 Commands
のバインドに問題があった場合は、空のコンテキストメニューが表示されます。ListBoxItemの動的コンテキストメニューを作成するにはどうすればよいですか?
スタイル:
<ContextMenu x:Key="CommandsContextMenu" ItemsSource="{Binding Commands}">
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Name}"/>
</Style>
</ContextMenu>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu" Value="{StaticResource CommandsContextMenu}" />
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<Binding Path="DataContext.HasCommands" />
</DataTrigger.Binding>
</DataTrigger>
</Style.Triggers>
</Style>
スヌープのDataContext:
スヌープ・プロパティは、ContextMenuプロパティを示すさえ設定されていません。
ここでの考え方は、タイプのいずれかを知らなくても、私はそれがバインドされたものがHasCommandsと呼ばれる性質を持っており、それがtrueに設定された場合は、リストボックスの項目のスタイルを持っているということでしたCommandsプロパティにバインドされたそのリストボックス項目にコンテキストメニューを設定します。
私はなぜ、コンテキストメニューが設定されませんPresentationTraceSources.DataBindingSource
から任意の結合エラーや警告が届きませんか?
ああ、お待ちください - ごめんなさい、私はあなたの質問を飛ばしました。私はあなたがここで唯一の問題は、単にメニュー項目のスタイルが定義されている場所だと思います。それは無視されるコンテンツの中にあります。 ' ... ' –
コンテキストメニューが「親」のビジュアルツリーに接続されていません。つまり、彼らは 'DataContext'を継承しません。この問題を回避するにはいくつかの方法があります。 https://stackoverflow.com/questions/15033522/wpf-contextmenu-woes-how-do-i-set-the-datacontext-of-contextmenu –
私がここに見る潜在的な問題は、あなたの 'ContextMenu'がリソースとして定義されます。デフォルトでは、インスタンスが1つしか作成されずに辞書からフェッチされるたびに返されます。その結果、この単一のインスタンスが複数の要素のコンテキストメニューとして設定されます。リソースが辞書からフェッチされるたびに新しいインスタンスが作成されるように、 'x:Shared =" False "'を設定してみてください。また、@ BradleyUffnerのコメントは有用で、おそらくそれがあなたが遭遇する次の問題になるでしょう。 – Grx70