У меня есть окно 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 остается статическим и получает только значение тега, установленное в первом элементе управления.
Как я могу заставить это работать, чтобы я мог получить доступ к каждому из значений тегов элементов управления, используя команду?
спасибо.