我想创建一个控件,让我为文本框中的值选择单位。为了实现这一点,我在文本框之后附加了一个按钮,并在悬停时打开了一个弹出窗口,其中包含一个带有可用单位的列表框。
如果我在此弹出窗口中放置一个按钮一切正常,我会获得悬停效果并可以单击该按钮。但是 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 之外还有另一种方法来完成这项任务,但它似乎是一个很好的解决方案,我发现一堆据说可以工作并且差别不大的代码。