【发布时间】:2012-10-23 08:30:45
【问题描述】:
我想创建一个控件,让我可以为文本框中的值选择单位。为了实现这一点,我在文本框后附加了一个按钮,并在悬停时打开了一个弹出窗口,其中包含一个带有可用单位的列表框。
如果我在此弹出窗口中放置一个按钮一切正常,我将获得悬停效果并可以单击该按钮。但是 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 之外还有另一种方法来完成这项任务,但它似乎是一个很好的解决方案,我发现了一堆据说可以工作并且差别不大的代码。
【问题讨论】:
-
听起来很复杂。为什么不简单地使用 ComboBox 来选择单位,而不是使用带有 Popup 的按钮。
-
这是一个设计和可用性要求,所以以这种方式设计它(小而简单的按钮和弹出行为)。也考虑过手动使用窗口,但定位可能具有挑战性。