我有一个简单的弹出控件,我想在我的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是包含弹出窗口的控件。
答案 0 :(得分:0)
当您调试代码(例如,提高断点)时,您将从弹出窗口中失去焦点。当弹出窗口没有将StaysOpen
属性设置为true时,它会在失去焦点时自行关闭。例如,如果您切换到另一个窗口/应用程序,然后切换回您的表单,您将看到弹出窗口已关闭。
IsOpen
在那个阶段真的是假的,因为弹出窗口已经(或正在中间)关闭。
要看到一切都按预期工作,而不是断点添加此行:
Debug.Print(contextMenu.IsOpen.ToString());
你会看到你仍然得到一个真实的,因为你没有使用断点并且没有失去焦点。