修复了XAML中的定位

时间:2014-10-06 03:14:46

标签: c# wpf xaml

我有一个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链接,但它们并没有真正帮助:

http://social.msdn.microsoft.com/Forums/en-US/9779328a-a7cd-447d-a4ac-bcc952083f43/fixed-positioning-in-wpf?forum=wpf

http://social.msdn.microsoft.com/Forums/windowsapps/en-US/7349d01d-dc0e-4e1c-9327-df90e00fbebf/how-to-handle-the-appearance-of-the-onscreen-keyboard?forum=winappswithcsharp

Popup control moves with parent

1 个答案:

答案 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有一些控件显示在一个层上,而这些元素是上下文菜单,工具提示和装饰,你也可以尝试它们。

我希望这些想法有所帮助。