使用找到的概念here on StackOverflow。 请注意,ToggleButton.IsHitTestVisible
与Popup.IsOpen
绑定StaysOpen="False"
。这应该意味着触摸外的任何地方 {{1}会导致它关闭。然而...
触摸/点击Popup
中的ListBoxItem
不会按预期关闭ItemsControl
。触摸Popup
中的任何其他位置关闭它。根据如何设置,这似乎并没有加起来。
Popup
有什么想法吗?感谢。
修改:已解决
事实证明这种情况正在发生,因为它位于一个源自<Grid ClipToBounds="True">
<Border Name="Root">
<ToggleButton x:Name="PART_Toggle"
ClickMode="Release"
IsHitTestVisible="{Binding ElementName=PART_Popup,
Path=IsOpen,
Mode=OneWay,
Converter={StaticResource BooleanInverter}}"/>
</Border>
<Popup x:Name="PART_Popup"
IsOpen="{Binding ElementName=PART_Toggle,
Path=IsChecked}"
PlacementTarget="{Binding ElementName=PART_Toggle}"
StaysOpen="False">
<Grid Background="Transparent">
<Grid>
<!-- Anything here (outside of the Item) -->
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<!-- Anything in this item template works. The popup does not close -->
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Border>
</Grid>
</Popup>
</Grid>
的自定义控件中。当我提出这个问题时,这似乎并不重要,抱歉。
答案 0 :(得分:1)
我认为在你的情况下问题是弹出窗口的位置或大小。在尝试代码时它确实有效,但是我必须在Popup上设置Placement="Center"
并在弹出窗口中设置网格的大小。
如果没有前者,弹出窗口不会放在while内部,而弹出窗口的大小只是其内容的大小(意味着没有外部点击)。
首先尝试将弹出窗口的背景设置为红色,或者查看弹出窗口是否实际定位并正确调整大小。
答案 1 :(得分:1)
原来这种情况正在发生,因为它位于从ListBox派生的自定义控件中。当我提出这个问题时,这似乎并不重要,抱歉。