свойство, как Checked
, Visible
, Enabled
или Supported
не может определить с помощью файла VSCT
. Вам нужен обработчик команд, который контролирует состояние команды. Я создал базовый класс, который завершает создание экземпляра OleMenuCommand
и обрабатывает событие команды BeforeQueryStatus
. Это облегченная версия моей реализации, но это даст вам представление о том, как решить эту проблему ...
internal abstract class CommandHandler : IDisposable
{
private readonly OleMenuCommand command;
protected CommandHandler(Guid group, int id)
{
var commandid = CommandID(group, id);
this.command = new OleMenuCommand(this.Invoke, commandId);
this.command.BeforeQueryStatus += this.OnBeforeQueryStatus;
}
protected virtual void OnExecute() { }
protected virtual void OnQueryStatus(QueryStatusEventArgs e) { }
private void Invoke(object sender, EventArgs e)
{
this.OnExecute();
}
private void OnBeforeQueryStatus(object sender, EventArgs e)
{
OleMenuCommand command;
if ((command = sender as OleMenuCommand) != null)
{
var e = new QueryCommandEventArgs
{
Checked = command.Checked,
}
this.OnQueryStatus(e);
command.Checked = e.Checked;
}
}
public void Dispose()
{
this.command.BeforeQueryStatus -= this.OnBeforeQueryStatus;
}
}
public class QueryCommandEventArgs : EventArgs
{
public bool Checked { get; set; }
}
CommandHandler
класса позволяет контролировать состояние любой команды меню. Просто получить новые реализации обработчика от него и переопределить OnExecute
и OnQueryStatus
методы, такие как ...
internal sealed class MyCommand : CommandHandler
{
private bool checked;
public MyCommand() : base(GuidCmdSet, MyCommandId) { }
protected override void OnExecute()
{
this.checked = !this.checked; // toggle checked state
}
protected override void OnQueryStatus(QueryStatusEventArgs e)
{
e.Checked = this.checked;
}
}
Привет. Я не заметил этих свойств, открытых «OleMenuCommand». Благодарю. Но все же этот флажок выглядит иначе, чем этот, представленный на скриншоте в моем вопросе. Возможно, это скриншот - это просто отдельные пункты меню, переключенные по их состоянию видимости ... ([как показано здесь] (http://dotneteers.net/blogs/divedeeper/archive/2010/05/23/vs-2010-package- разработка-глава-2-команд-меню-и-toolbars.aspx))? И второе различие - когда я нажимаю на элемент, он закрывается (исчезает, что обычно является правильным поведением). Знаете ли вы, как держать его постоянно открытым (сверху) во время клика? – jwaliszko
Хм; Я бы сказал, что флажки выглядят так же, как на скриншоте; К сожалению, я не знаю, как предотвратить закрытие меню при нажатии элемента. – Matze