Одно из решений: XAML за
<MenuItem x:Name="MyMenu" MouseEnter="MenuItem_MouseEnter" MouseLeave="MenuItem_MouseLeave" Header="toto" >
<MenuItem Header="titi"/>
</MenuItem>
Код:
private void MenuItem_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
this.MyMenu.IsSubmenuOpen = true;
}
private void MenuItem_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
this.MyMenu.IsSubmenuOpen = false;
}
Использование XAML (Спасибо HB за советом, первый редактирования):
<MenuItem.Style>
<Style TargetType="MenuItem">
<Style.Triggers>
<Trigger Property="IsHighlighted" Value="True">
<Setter Property="IsSubmenuOpen" Value="True"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="IsSubmenuOpen" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
Не можете использовать IsHighlighted false, потому что он все еще подсвечивается, когда мышь не над ним. 2nd edit: кажется, что есть ошибка, когда окна showdialog отображаются, когда меню открыто. Поэтому нам нужно объединить с событием MouseEnter, чтобы предотвратить эту ошибку. (ошибка в том, что подменю больше не открывается после всплывающего окна)
XAML, который вы опубликовали, выглядит совершенно справедливо для меня. Когда я протестировал его, элемент Titi появится, как требуется, после небольшой задержки. Что происходит, когда вы пытаетесь расширить меню? У вас есть какие-то странные стили, установленные на ваших объектах? –
@ bobsmith833: Вы действительно разместили этот код - это какой-то элемент, который является * не * меню? –
@ H.B. - Ах, нет, я этого не сделал! Ой ... Примечание для себя: подгоните мозг на место, прежде чем пытаться ответить на вопросы. Похоже, что OP все равно нашел решение. –