在WPF Popup中与ListBox的交互不起作用

时间:2012-10-23 08:30:45

标签: wpf listbox popup focus

我想创建一个控件,让我选择文本框中值的单位。为了实现这个目的,我在文本框后面添加了一个按钮,并在包含带有可用单位的ListBox的悬停上打开了一个弹出窗口。

如果我在此弹出窗口中放置一个按钮,一切正常,我会得到悬停效果并可以单击按钮。但ListBox无法按预期工作。没有什么特别的,我无法点击或聚焦ListBox项目。将弹出窗口的FocusManager.IsFocusScope设置为true可以让我选择一个项目,只需点击两下,首先聚焦窗口,然后选择第二个聚焦ListBox。以编程方式移动焦点也无济于事。

示例弹出窗口:

<Popup x:Name="PART_UnitPopup" 
  PlacementTarget="{Binding}" 
  Placement="Bottom">
  <StackPanel>
    <ListBox x:Name="PART_UnitPopupListBox" ItemsSource="{Binding,Path=Units}"/>
    <Button Content="Click me!" />
  </StackPanel>
</Popup>

阅读一些内容并尝试一些解决方案,将重点放在打开或关注弹出窗口的事件上,但不要让这项工作按正常方式运行,就像按钮一样。也许除了popop之外还有另一种方法可以完成这项任务,但是接缝是一个很好的解决方案,我发现了一堆据说工作且没有太大差异的代码。

1 个答案:

答案 0 :(得分:0)

我找到了一个与实际解决方案有点距离的解决方法,但我想分享一下。 因为按钮接缝工作得很好我将按钮放入ListBox`项模板并更改了样式以使它们看起来像扁平对象。现在悬停和交互工作无需点击两次。

作为一个陷阱,我不再能够依赖选择更改事件,因为按钮会拦截所有点击。所以我在按钮上添加了一个命令,它执行与之前更改的处理程序相同的工作。这基本上可以完成工作,但其他想法将不胜感激。