当使用鼠标并将鼠标悬停在通用Windows平台(UWP)FlipView
控件上时,将显示上一个/下一个导航按钮。
然而,当使用触摸或笔时,它们仍然是隐藏的,这可能使用户混淆而不期望额外的内容。
我希望导航按钮始终可见。我怎样才能做到这一点?
我们需要创建一个自定义FlipView
。从下面显示的代码开始:
public class CustomFlipView : FlipView
{
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
SelectionChanged += (s,e) => UpdateNavigationButtonsVisibility();
Button prev = GetTemplateChild("MyPreviousButtonHorizontal") as Button;
prev.Click += OnBack;
prev.Visibility = Visibility.Collapsed;
Button next = GetTemplateChild("MyNextButtonHorizontal") as Button;
next.Click += OnNext;
next.Visibility = Visibility.Collapsed;
}
private void OnBack(object sender, RoutedEventArgs e)
{
if (Items.Any())
{
SelectedIndex--;
UpdateNavigationButtonsVisibility();
}
}
private void OnNext(object sender, RoutedEventArgs e)
{
if (Items.Any())
{
SelectedIndex++;
UpdateNavigationButtonsVisibility();
}
}
private void UpdateNavigationButtonsVisibility()
{
Button prev = GetTemplateChild("MyPreviousButtonHorizontal") as Button;
Button next = GetTemplateChild("MyNextButtonHorizontal") as Button;
if (SelectedIndex < 1)
prev.Visibility = Visibility.Collapsed;
if (SelectedIndex == Items.Count - 1)
next.Visibility = Visibility.Collapsed;
if (Items.Count > 1 && SelectedIndex != Items.Count - 1)
next.Visibility = Visibility.Visible;
if (Items.Count > 1 && SelectedIndex > 0)
prev.Visibility = Visibility.Visible;
}
}
在打开需要插入CustomFlipView
的XAML文件之前构建项目。然后将控件添加到您的XAML;您可能需要根据创建CustomFlipView
类的位置添加名称空间声明。
默认FlipView
的问题是滚动按钮仅在指向它时显示自己,这是我们在触摸设备的情况下没有的东西。为了使事情变得更复杂,内部代码在加载时将模板的按钮不透明度设置为零,因此我们需要更改两个导航按钮的名称,以便内部代码优雅地降级并允许它们始终可见。然后我们添加代码以便在单击导航按钮时进行处理,这样我们就不会在第一页上显示上一个按钮或在最后一页上显示下一个按钮。
要覆盖导航按钮的名称,我们需要编辑控件的模板。最快捷的方法是打开“文档大纲”窗格,右键单击“CustomFlipView”→“编辑模板”→“编辑副本”。
很多代码都会出现在你的XAML中,但找到的重要部分如下所示:
<Button x:Name="MyPreviousButtonHorizontal" HorizontalAlignment="Left" Height="70" IsTabStop="False" Template="{StaticResource HorizontalPreviousTemplate}" UseSystemFocusVisuals="False" VerticalAlignment="Center" Width="40"/>
<Button x:Name="MyNextButtonHorizontal" HorizontalAlignment="Right" Height="70" IsTabStop="False" Template="{StaticResource HorizontalNextTemplate}" UseSystemFocusVisuals="False" VerticalAlignment="Center" Width="40"/>
注意我将previousButtonHorizontal中的x:Name
属性重命名为MyPreviousButtonHorizontal,将NextButtonHorizontal重命名为MyNextButtonHorizontal,以匹配我们之前编写的代码隐藏。
现在CustomFlipView
应该在使用触摸和笔时显示导航箭头,而不仅仅是鼠标。