与AppBar一起实现列表视图多选方案的SIMPLEST方法是什么?因此,当选择多个项目时(例如,通过鼠标右键单击),它的行为与Windows 8开始屏幕完全相同。
我想显示应用栏以及第一个选择的列表视图项,我想用第二个,第三个等保持打开,我希望通过任何应用栏按钮操作关闭它(执行上下文操作) )或通过其他系统范围的应用栏关闭操作(例如右键单击其他地方,这将意味着上下文操作被取消)。
我目前的实施太复杂了。我相信我一定错过了一些东西 - 这种基本和常见的场景必须能够以标准化的方式实施。
以下准备的脚手架代码。如果只有此代码使用应用栏隐藏,则右键单击第二个列表视图项,再需要右键单击列表视图(不可接受)。如果与IsSticky结合使用,则根本无法选择第二个列表视图项。
<Page
x:Class="ListViewAndAppBar.ExamplePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ListViewAndAppBar"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
DataContext="{Binding ExamplePageViewModel, Source={StaticResource Locator}}">
<Grid Background="Gray">
<ListView
x:Name="ListView"
ItemsSource="{Binding Persons}"
SelectionMode="Multiple"
SelectionChanged="ListView_SelectionChanged">
</ListView>
</Grid>
<Page.BottomAppBar>
<AppBar x:Name="BottomAppBar" Padding="10,0,10,0">
<Button x:Name="BottomAppBarBack" Tag="Back" Style="{StaticResource BackAppBarButtonStyle}" HorizontalAlignment="Left" />
</AppBar>
</Page.BottomAppBar>
</Page>
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
this.BottomAppBar.IsOpen = true;
//this.BottomAppBar.IsSticky = true;
}
答案 0 :(得分:9)
回答我自己的问题。我发布问题后,我发现解决方案很短。我会留在这里以防有人做同样的初学者的错误。
解决方案不能简单: IsSticky必须在IsOpen之前调用。在此切换之后,所有工作都按预期工作。
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (this.ListBox.SelectedItems.Count > 0)
{
this.BottomAppBar.IsSticky = true;
this.BottomAppBar.IsOpen = true;
}
else
{
this.BottomAppBar.IsOpen = false;
this.BottomAppBar.IsSticky = false;
}
// Or the following if you wish...
// this.BottomAppBar.IsOpen = this.BottomAppBar.IsSticky = this.ListView.SelectedItems.Count > 0;
}