打开窗口激活不使用菜单中的按钮

时间:2014-04-07 14:12:39

标签: c# wpf xaml

我有一种非常奇怪的行为,我希望有人可以帮助我。

我有以下XAML布局:

<StackPanel Orientation="Horizontal">
    <Menu>
        <Menu.Items>
            <MenuItem Padding="2,0,2,0">
                <MenuItem.Header>
                    <Button Content="Details"
                            Click="Details_Click" />
                </MenuItem.Header>
            </MenuItem>
        </Menu.Items>
    </Menu>
    <Button Content="Details"
            Click="Details_Click" />
</StackPanel>

请注意,两个按钮都注册了相同的事件。 Details_Click事件如下所示:

private void Details_Click(object sender, RoutedEventArgs e)
{
    var viewer = new DictionaryViewer();
    viewer.ShowActivated = true;
    viewer.Show();
    viewer.Topmost = true;
    viewer.Topmost = false;
    viewer.Activate();
    viewer.Focus();
    e.Handled = true;
    return;
}

现在我遇到了这个问题,即使我按下Menu内的按钮时,窗口上方的所有代码都没有显示,但外面只有.Activate();。 (我怎么知道窗口没有被激活:需要2次点击才能关闭/最小化/最大化它)

为什么我的XAML布局会破坏DictionaryViewer();窗口的激活,按钮 Menu内?

(根据你的信息,DictionaryViewer完全是空的,它还没有实现新的窗口)

修改

是的,我知道有MenuItem_Click事件可能会让它发挥作用,但我需要/想要菜单中的按钮如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为在Window打开后,MenuItem中的Button正在获得焦点。

如果在MenuItem中设置按钮的Focusable属性,则可以解决问题。

E.g。

<StackPanel Orientation="Horizontal">
    <Menu>
        <Menu.Items>
            <MenuItem Padding="2,0,2,0">
                <MenuItem.Header>
                    <Button Content="Details"
                            Click="Details_Click"
                            Focusable="False" />
                </MenuItem.Header>
            </MenuItem>
        </Menu.Items>
    </Menu>
    <Button Content="Details"
            Click="Details_Click" />
</StackPanel>