【发布时间】:2011-04-11 18:08:57
【问题描述】:
我有一个带有多个文本框控件的 wpf 窗口。我需要应用一种通用样式,将上下文菜单应用于每个控件,并且我已将其全局定义如下,
<ContextMenu x:Key="textBoxMenu">
<Separator/>
<MenuItem Header="Affirm"
Command="{Binding Path=AffirmCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TextBox},AncestorLevel=1}}"/>
</ContextMenu>
<Style TargetType="{x:Type TextBox}" x:Key="TextBoxAffirmMenuStyle">
<Setter Property="ContextMenu" Value="{DynamicResource textBoxMenu}" />
</Style>
我已经根据上下文菜单的目标(在本例中为文本框)使用命令来执行适当的方法。
为了唯一标识控件,我为每个控件的“Tag”属性设置了一个唯一的字符串,并从设置为目标文本框控件本身的命令参数访问此标记。
private bool CanAffirmExecute(object param)
{
string columnName = (param as FrameworkElement).Tag as string;
if (this.CheckIsAffirmed(columnName))
return true;
else
return false;
}
private void AffirmExecute(object param)
{
string columnName = (param as FrameworkElement).Tag as string;
this.Affirm(columnName);
}
这样做的问题是,一旦命令参数设置为特定控件, 当右键单击不同的控件时,它不会在随后的上下文菜单操作中改变。 Command 参数保持静态,仅获取第一个控件中设置的标记值。
我怎样才能让它工作,以便我可以使用命令访问控件的每个标记值?
谢谢。
【问题讨论】:
标签: wpf contextmenu command