2016-11-30 64 views
1

是的,我用Google搜索它,这个解决方案没有做的伎俩:UWP FlipView防止用户交互

Disable navigation on FlipView

,因为我想留改变与动画项目,但只有编程。

我已经调查了FlipView模板,发现所有的交互/动画等按名称使用ScrollingHost内置:

<ScrollViewer x:Name="ScrollingHost" AutomationProperties.AccessibilityView="Raw" BringIntoViewOnFocusChange="{TemplateBinding ScrollViewer.BringIntoViewOnFocusChange}" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalSnapPointsType="MandatorySingle" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" IsTabStop="False" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsHorizontalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsHorizontalScrollChainingEnabled}" IsVerticalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsVerticalScrollChainingEnabled}" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" Padding="{TemplateBinding Padding}" TabNavigation="{TemplateBinding TabNavigation}" VerticalSnapPointsType="MandatorySingle" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" ZoomMode="Disabled"> 
    <ItemsPresenter/> 
</ScrollViewer> 

所以,我创建了一个自定义类MyFlipView和FlipView derivered和overrided MouseWheel(这给了我在桌面上所需的行为),并从模板中删除导航按钮(这也限制了用户交互)。但唯一剩下的,用户仍然可以通过指针(平板电脑,手机,甚至可以是带触摸屏的PC)拖动项目。这里是我的代码:

public class MyFlipView : FlipView 
{ 
    ScrollViewer scroll; 

    public MyFlipView() 
    { 

    } 

    protected override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     scroll = GetTemplateChild("ScrollingHost") as ScrollViewer; 
     scroll.HorizontalScrollMode = ScrollMode.Disabled; 
     scroll.VerticalScrollMode = ScrollMode.Disabled; 
     scroll.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled; 
     scroll.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; 
     scroll.IsHorizontalRailEnabled = false; 
     scroll.IsVerticalRailEnabled = false; 
     scroll.IsVerticalScrollChainingEnabled = false; 
     scroll.IsHorizontalScrollChainingEnabled = false; 
     scroll.IsHoldingEnabled = false; 
    } 

    protected override void OnPointerWheelChanged(PointerRoutedEventArgs e) 
    { 
     e.Handled = true; 
     //base.OnPointerWheelChanged(e); 
    } 
} 

正如你可以看到,我试图做禁止在ScrollingHost所有的滚动,但它仍然可以切换触摸屏上的项目。我怎样才能禁用它们呢?

+0

如果您只想以编程方式进行更改,使用ContentPresenter并仅更改内容会不会更容易?添加进出动画和几乎设置...翻转视图是专门用于确切目的,允许用户导航通过集合,你真的想摆脱所有这一切。 – Barptad

回答

0

如果你不需要与FlipView进行任何交互,那么一个简单但却......有点儿丑陋的解决方案就是将一个(几乎)透明的矩形放在你的FlipView之上。

<Grid> 
    <FlipView ... /> 
    <Rectangle Fill="White" Opacity="0.01" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
</Grid> 
+0

此解决方案不会让我使用像文本框等子元素 – Cheese

1

将FlipView的IsHitTestVisible属性设置为false。 然后设置KeyboardNavigation.DirectionalNavigation为无

这基本上是说:“你不能碰我或者标签给我”

托马斯Schneiter的回答将仍然允许它通过导航的黏合/其他越野车的方法来达到。

+0

此解决方案不会让我使用像文本框等子元素 – Cheese

+0

@我看到的奶酪,在这种情况下,你将不得不打开的模板FlipView并将它内部的零件和装订线穿出,以允许物理用户输入(如按钮);然后为了阻止他们用手指向左和向右滑动,您必须为触摸事件创建一个新方法,并对其进行处理;停止接收这种输入的控制。 – Logan

+0

...或者只是通过处理各种可交互的事件来做到这一点 – Logan