저는 Windows Store 스타일 WPF 응용 프로그램이 있으며 방금 검색 기능이 추가되었습니다. 앱 표시 줄에서 검색 버튼을 클릭하면 SearchBox
이 포함 된 FlyoutPresenter
을 Visible
으로 설정합니다. 이 버튼은 오른쪽 아래 모서리에 있습니다. 키보드가있는 컴퓨터에서는 잘 작동하지만 가상 키보드 인 InputPane
이 열리면 문제가 발생합니다. 먼저, 키보드가 상자를 덮었습니다. 상자에 포커스가있을 때 상자의 여백을 확인하고 조정하여이 문제를 해결했지만 페이지를 맨 위와 맨 아래로 스크롤하면 컨트롤이 페이지에서 움직이기 시작합니다. 여기 내 최소한의 코드입니다XAML의 고정 위치 지정
XAML :
<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>
C 번호 :
상자가 화면에 스크롤 사용자에 의해 영향을받지 않을하기위한 것입니다 내가 필요public partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
// Close app bar, show search box, and set margin to bottom of page
private void Search_Click(object sender, RoutedEventArgs e)
{
BAppBar.IsOpen = false;
SearchPop.Visibility = Windows.UI.Xaml.Visibility.Visible;
SearchPop.Margin = new Thickness(0, MainGrid.ActualHeight - SearchPop.ActualHeight, 0, 0);
}
// Set margin for opening/closing virtual keyboard
private void Search_Focus(object sender, RoutedEventArgs e)
{
Windows.UI.ViewManagement.InputPane.GetForCurrentView().Showing += (s, args) =>
{
double flyoutOffset = (int)args.OccludedRect.Height - SearchPop.ActualHeight;
SearchPop.Margin = new Thickness(0, flyoutOffset, 0, 0);
};
Windows.UI.ViewManagement.InputPane.GetForCurrentView().Hiding += (s, args) =>
{
SearchPop.Margin = new Thickness(0, MainGrid.ActualHeight - SearchPop.ActualHeight, 0, 0);
};
}
// Close search
private void Search_Close(object sender, RoutedEventArgs e)
{
SearchPop.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
}
}
. HTML에서는이를 Fixed Positioning이라고합니다. XAML에서는 기본적으로 가능하지 않지만 해결 방법이 있다는 것을 읽었습니다. 나는이 MSDN 및 SO 링크를 읽고,하지만 그들은 정말 도움이되지 않았다 :
Popup control moves with parent
OK, 그냥이 질문을 해결하지 못했지만 InputPane이 열려있는 동안 검색 상자를 페이지 맨 위로 이동하여 문제를 해결했습니다. 모든 답변을 주시면 감사하겠습니다. – Hosch250