Меню WPF закрывается при наведении мыши на окно, открытое из проекта надстройки Excel - PullRequest
1 голос
/ 20 июля 2011

У меня проблема при создании меню в WPF.Что происходит, что он закрывается автоматически, когда вы перестаете нажимать кнопку мыши.Я хочу, чтобы оно работало как обычное меню, в котором вы можете щелкнуть мышью, и подэлементы останутся в рабочем состоянии, но я не могу найти способ сделать это.

Код выглядит следующим образом:

<Window x:Class="ExcelAddIn.MyWindow"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
        <Grid>
            <DockPanel>
                <Menu Width="Auto" IsMainMenu="True" >
                    <MenuItem Header="Item">
                        <MenuItem Header="SubItem" />
                    </MenuItem>
                </Menu>
            </DockPanel>
        </Grid>
</Window>

Мне интересно, имеет ли это какое-либо отношение к логическому фокусу, может быть?Я видел что-то об этом может быть ошибка в .NET Framwork?Есть идеи?

Заранее спасибо

Сначала я не думал, что это что-то меняет, но, очевидно, это так.При запуске кода в автономном приложении WPF это работает, однако, когда я пытаюсь открыть окно WPF из проекта надстройки Excel, я получаю эту проблему ..

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Хорошо! Я решил проблему. Оказывается, это была проблема фокуса в конце концов. Когда модуль Excel выполнил окно WPF, окно Excel все еще было в фокусе. Таким образом, при каждом увеличении фокуса отскочил бы от WPF к совершенству.

Все, что мне нужно было сделать, это изменить исполнение с этого:

MainWindow mainWindow = new MainWindow();
mainWindow.Activate();
mainWindow.Show();

к этому:

MainWindow mainWindow = new MainWindow();
mainWindow.Activate();
mainWindow.ShowDialog();

Спасибо за помощь, ребята!

0 голосов
/ 20 июля 2011

Я немного подкорректировал ваш код (DockPanel.Dock="Top" и дополнительная сетка, чтобы заполнить оставшуюся панель док-станции).Он работает нормально, и меню остается открытым.Это работает для вас?:

<Window x:Class="WpfApplication2.Window3"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window3" Height="300" Width="300">
    <Grid>
        <DockPanel>
            <Menu Width="Auto"
                  IsMainMenu="True" DockPanel.Dock="Top">
                <MenuItem Header="Item">
                    <MenuItem Header="SubItem" />
                </MenuItem>
            </Menu>
            <Grid />
        </DockPanel>
    </Grid>
</Window>
...