MainWindow .xaml
<Window.ContextMenu>
<ContextMenu x:Name="winCM">
<!--<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding CloseCommand}" />
</Style>
</ContextMenu.ItemContainerStyle>-->
<MenuItem Name="menuItem_Close" Header="Close" Command="{Binding Path=DataContext.CloseCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
<!--Command="{Binding Path=PlacementTarget.DataContext.CloseCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"-->
</ContextMenu>
</Window.ContextMenu>
MainWindow.cs
public partial class MainWindow : Window
{
private bool _canCloseCommandExecute;
public bool CanCloseCommand
{
get
{
return _canCloseCommandExecute;
}
}
private RelayCommand _closeCommand;
public ICommand CloseCommand
{
get
{
if (_closeCommand == null)
{
_closeCommand = new RelayCommand(p => this.OnClose(p), p => CanCloseCommand);
}
return _closeCommand;
}
}
public void OnClose(object obj)
{
Close();
}
public MainWindow()
{
InitializeComponent();
/* This will do the trick here */
this.winCM.DataContext = this;
this._canCloseCommandExecute = true;
}
}
RelayCommand.cs
public class RelayCommand : ICommand
{
#region Fields
readonly Action<object> _execute;
readonly Predicate<object> _canExecute;
#endregion // Fields
#region Constructors
public RelayCommand(Action<object> execute)
: this(execute, null)
{
}
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
#endregion // Constructors
#region ICommand Members
[DebuggerStepThrough]
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add
{
CommandManager.RequerySuggested += value;
}
remove
{
CommandManager.RequerySuggested -= value;
}
}
public void Execute(object parameter)
{
_execute(parameter);
}
#endregion // ICommand Members
}
En realidad, esto se sumará a TextBlock colección de elementos de la Menultem. Y también coloca MenuItem dentro de otro MenuItem. – arconaut
Pero con su publicación comencé a pensar en la creación de plantillas de MenuItem, esto podría ser lo que necesito. – arconaut
Sí, eso es lo que me probé hace solo un minuto. – arconaut