我想用CommandBar
和一个Flyout
来构建这样的东西。
的数据
用户应单击CommandBar
(Flyout
打开)中的按钮,然后在TextBox
中输入文本,然后单击TextBox
右侧的按钮以启动搜索请求。问题是,当我点击文本框时,我无法输入文本。在我能写点什么之前,它似乎失去了焦点。下面是示例代码。怎么了?
<Page.Resources>
<DataTemplate x:Key="Search">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" />
<AppBarButton Grid.Column="1" Icon="Find" />
</Grid>
</DataTemplate>
</Page.Resources>
<Grid>
<CommandBar RequestedTheme="Dark">
<AppBarButton Icon="Find">
<AppBarButton.Flyout>
<Flyout Placement="Bottom" >
<ContentPresenter ContentTemplate="{StaticResource Search}"/>
</Flyout>
</AppBarButton.Flyout>
</AppBarButton>
</CommandBar>
</Grid>
字符串
3条答案
按热度按时间7lrncoxx1#
在
AppBarButton
上将AllowFocusOnInteraction
属性设置为true
。XAML中的解决方案(如果应用程序最小目标版本为10.0.14393或更高版本)
字符串
如果应用的最低版本低于周年更新1607(内部版本10.0.14393)(即使您的目标版本为1607或更高版本),您也无法直接在XAML中设置
AllowFocusOnInteraction
属性。相反,您应该在代码隐藏中执行此操作。C#代码隐藏解决方案
型
您还可以将其 Package 到附加属性中,即使在旧的Windows 10版本上也可以在XAML中使用。
更多信息
这是Windows 10周年更新(1607),内部版本14393上的 * 新功能 *。
这对大多数应用栏的使用来说是一个改进,但会干扰你的使用,所以当你把你的构建版本改为14393而不是10586时,你需要覆盖默认值。
这是一篇博客文章ComboBox on a Flyout attached to an AppBarButton loses mouse input on 1607。它还包含附加属性实现。
vhmi4jdf2#
你的文本框实际上从来没有得到焦点,不知何故弹出阻止它,唯一的行动,我可以从这个文本框是指针状态-使它看起来像它有焦点,但它不是。
您需要在代码中设置焦点,例如当弹出按钮打开时-它可以工作,但可能不是最好的解决方案,因为您需要命名TextBox以便从代码后面获取它。
字符串
然后是code behind:
型
7cwmlq893#
我可以重现这个问题。我认为这是周年更新(1607)SDK(14393)中的一个错误,因为如果我将目标SDK降级到10586,everythink工作正常。
ps.:我不知道如何向微软报告这个bug。