为什么Wpf Popup.IsOpen = true从ListBox保持打开状态?

时间:2014-08-14 18:28:16

标签: wpf listbox popup

我有一个带有Button和ListBox的窗口。

  <Window x:Class="ListBoxFail.MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          Height="350" Width="525">
     <Grid>
        <Popup Name="Popup" StaysOpen="False">
           <Rectangle Fill="Blue" Width="100" Height="100"/>
        </Popup>
        <Button Content="ClickMe" Click="OpenPopup" VerticalAlignment="Top"/>
        <ListBox SelectionChanged="OpenPopup" VerticalAlignment="Bottom">
           <ListBoxItem Content="One"/>
           <ListBoxItem Content="Two"/>
        </ListBox>
     </Grid>
  </Window>

Button和ListBox都会触发Popup打开:

  namespace ListBoxFail {
     partial class MainWindow {
        public MainWindow() { InitializeComponent(); }
        private void OpenPopup(object a, object b) { Popup.IsOpen = true; }
     }
  }

单击该按钮时,将打开弹出窗口。单击其他任何位置然后按预期关闭弹出窗口。

单击ListBox时,弹出窗口将打开。但是,此时关闭弹出窗口的唯一方法是让主窗口失去焦点。单击窗口或单击按钮不会关闭弹出窗口。

是什么给出的?为什么 ListBox会忽略StaysOpen = false指令?我做错了什么?

1 个答案:

答案 0 :(得分:0)

你本身没有做错任何事。 ListBox及其焦点事件可能有点“不确定”。我建议调查焦点事件如何在ListBox上工作,但是值得考虑以下内容:

<ListView.ItemContainerStyle>
    <Style TargetType="ContentControl">
        <Setter Property="Focusable" Value="False"/>
    </Style>
</ListView.ItemContainerStyle>

这可能值得研究,但如果它似乎没有帮助或解决您的问题,请告诉我,我们可以仔细研究这个问题。