PopUp控件IsOpen属性总是返回false

时间:2012-10-24 09:02:08

标签: wpf popup contextmenu

我有一个简单的弹出控件,我想在我的wpf应用程序中使用contextmenu但是它的isOpen属性总是显示为false而我的poup没有显示。我尝试在xaml中以及通过我的代码更改它,但都是徒劳的。谁能告诉我为什么会发生这种意想不到的行为?

 <Grid>
    <StackPanel>
        <Popup x:Name="contextMenu" IsOpen="True" StaysOpen="False">
            <Grid>
                <Border BorderBrush="Black"
                        BorderThickness="2"
                        CornerRadius="3"
                        Background="AliceBlue">
                    <ListBox Name="ContextMenuList"
                             HorizontalAlignment="Stretch"
                             SelectionChanged="ContextMenuListSelectionChanged" />

                        ItemsSource="{Binding Path=ContextMenuListBinding}"
                        SelectedItem="{Binding Path=ContextMenuListBinding,
                        Mode=OneWay}"

                </Border>
            </Grid>
        </Popup>
    </StackPanel>
</Grid>


public void PositionContextMenu()
    {

        contextMenu.PlacementRectangle = new Rect(700, 250, 40, 30);
        contextMenu.Placement = PlacementMode.Absolute;
        contextMenu.IsOpen = true;

    }

当我调试我的代码contextmenu.Isopen总是将其值显示为false。

对函数的调用是在MouseLeftbuttonDown事件中进行的: -

 void MapMouseLeftButtonDownCommand(MouseEventArgs e)
    {

           var mycontextmenu = new MyContextMenu();

        mycontextmenu.PositionContextMenu();
    }

MyContextMenu是包含弹出窗口的控件。

1 个答案:

答案 0 :(得分:0)

当您调试代码(例如,提高断点)时,您将从弹出窗口中失去焦点。当弹出窗口没有将StaysOpen属性设置为true时,它会在失去焦点时自行关闭。例如,如果您切换到另一个窗口/应用程序,然后切换回您的表单,您将看到弹出窗口已关闭。

IsOpen在那个阶段真的是假的,因为弹出窗口已经(或正在中间)关闭。

要看到一切都按预期工作,而不是断点添加此行: Debug.Print(contextMenu.IsOpen.ToString());

你会看到你仍然得到一个真实的,因为你没有使用断点并且没有失去焦点。