0

我想创建一个控件,让我为文本框中的值选择单位。为了实现这一点,我在文本框之后附加了一个按钮,并在悬停时打开了一个弹出窗口,其中包含一个带有可用单位的列表框。

如果我在此弹出窗口中放置一个按钮一切正常,我会获得悬停效果并可以单击该按钮。但是 ListBox 不能按预期工作。没有做任何特别的事情,我无法单击或聚焦 ListBox 项目。将弹出窗口的 F​​ocusManager.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 之外还有另一种方法来完成这项任务,但它似乎是一个很好的解决方案,我发现一堆据说可以工作并且差别不大的代码。

4

1 回答 1

0

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

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

于 2012-10-23T14:23:49.673 回答