0

我有一个简单的弹出控件,我想在我的 wpf 应用程序中使用它作为 contextmenu,但它的 isOpen 属性始终显示为 false 并且我的弹出窗口没有显示。我尝试在 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 是包含我的弹出窗口的控件。

4

1 回答 1

0

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

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

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

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

于 2012-10-24T09:38:55.060 回答