ContextMenu показывает менее 1 секунды - PullRequest
0 голосов
/ 08 марта 2012

Я хотел бы контролировать, когда контекстное меню моего элемента управления показывать или нет.

вот мой код:

void MyControl_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    if ( some condition .....)
    {


            this.Focus();
            contextmeun.PlacementTarget = this;
            contextmeun.IsOpen = true;


    }
}

Тем не менее, он просто появляется менее чем за 1 секунду, а затем сразу исчезает. Почему это?

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Возможно, потому что вы фокусируете элемент управления, к которому принадлежит контекстное меню, а затем показывает контекстное меню, однако, когда родительский элемент управления получает фокус, контекстное меню закрывается.

Попробуйте установить контекстное меню в Xaml, чтобы получить правильное поведение

<MyControl>
    <MyControl.ContextMenu>
        <ContextMenu>
            <!-- Define context menu here -->
        </ContextMenu>
    </MyControl.ContextMenu>
</MyControl>
0 голосов
/ 08 марта 2012

Это можно сделать в чистом виде XAML, все, что вам нужно сделать, это связать ваше visibility контекстного меню со свойством bool, содержащим ваше условие следующим образом -

<YourControl>
  <YourControl.Resources>
     <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
  </YourControl.Resources>
  <YourControl.ContextMenu>
   <ContextMenu Visibility="{Binding IsEnable,
                Converter={StaticResource BooleanToVisibilityConverter}}">
      <MenuItem Header="MenuItem1"/>
      <MenuItem Header="MenuItem2"/>
      <MenuItem Header="MenuItem3"/>
    </ContextMenu>
  </YourControl.ContextMenu>
</YourControl>

Здесь IsEnable - это простое свойство CLR, в его геттере вы можете иметь логику для вашего условия, в зависимости от которой вам нужно переключить видимость вашего контекстного меню ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...