我有一个Windows Store风格的WPF应用程序,我刚刚添加了搜索功能。当我点击应用栏中的“搜索”按钮时,我将包含FlyoutPresenter
的{{1}}设置为SearchBox
。此按钮位于右下角。它在带有键盘的计算机上运行良好,但是当虚拟键盘或Visible
打开时,我遇到了问题。首先,键盘盖住了盒子。我通过在框对焦时检查并调整框的边距来解决该问题,但是当我将页面滚动到最顶部和底部时,控件开始在页面上移动。这是我的最小代码:
XAML:
InputPane
C#:
<Grid Background="White" x:Name="MainGrid">
<!-- App Bar with Search button -->
<AppBar x:Name="BAppBar" VerticalAlignment="Bottom">
<CommandBar>
<CommandBar.PrimaryCommands>
<AppBarButton Icon="Find" Label="Search" Click="Search_Click"/>
</CommandBar.PrimaryCommands>
</CommandBar>
</AppBar>
<!-- Search button and Close button -->
<FlyoutPresenter VerticalAlignment="Top" Name="SearchPop" Visibility="Collapsed">
<StackPanel Orientation="Horizontal">
<SearchBox Name="Search" GotFocus="Search_Focus" LostFocus="Search_Focus"/>
<AppBarButton Name="SearchClose" Icon="Cancel" Click="Search_Close" />
</StackPanel>
</FlyoutPresenter>
</Grid>
我需要的是盒子不会受到用户在屏幕中滚动的影响。在HTML中,这称为固定定位。我已经读过它在XAML中本身不可能,但有一些解决方法。我已阅读这些MSDN和SO链接,但它们并没有真正帮助:
答案 0 :(得分:1)
您可以用非常简单的方式模拟XAML中的固定行为:
<Grid Background="White" x:Name="MainGrid">
<ContentControl VerticalAligment="Stretch" HorizontalAligment="Stretch">
<!--All other visual controls, the float item will be located over all controls located here, even scrolls viewers-->
</ContentControl>
<!-- Float item -->
<SomeControl>
<!--The control you want be over in the fixed position,
you can set the layout to it, and locate it where you want
just set the Vertical/Horizontal Aligment, margin, height, width-->
</SomeControl>
</Grid>
(对不起,如果代码示例有一些sintax错误,我已经写好了) 另外wpf有一些控件显示在一个层上,而这些元素是上下文菜单,工具提示和装饰,你也可以尝试它们。
我希望这些想法有所帮助。