0

我的 MainPage 上有一个 ScrollViewer,其中包含所有其他元素(当然 AppBar 除外)。滚动工作正常,但我想禁用捕捉行为(你将整个页面拖到左边,释放它,它会重新捕捉)。参见图像(ScrollViewer 的背景:黑色,网格的背景:白色)。那么如何禁用这种行为呢?也称为过度滚动或反弹效果。

我刚刚发现了IsScrollInertiaEnabled,但是将其设置为 false 并没有帮助。

<ScrollViewer VerticalScrollMode="Disabled" 
                  VerticalScrollBarVisibility="Disabled" 
                  HorizontalScrollBarVisibility="Visible" 
                  ZoomMode="Disabled" 
                  HorizontalSnapPointsType="None" 
                  VerticalSnapPointsType="None" 
                  ZoomSnapPointsType="None">
    <VisualStateManager>...</VisualStatemanager>
    <Grid Style="{StaticResource LayoutRootStyle}">
        <Grid.RowDefinitions>
            <RowDefinition Height="140"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!-- Back button and page title -->
        ...
        <!-- My content grid -->

     </Grid>
</ScrollViewer>

在此处输入图像描述 在此处输入图像描述

4

3 回答 3

1

抱歉误解了你的意思。如果可以的话,请发布一些额外的 xaml .. scrollviewer 容器 xaml 可能会有所帮助

尝试这样的事情

<Grid Style="{StaticResource LayoutRootStyle}">
    <Grid.RowDefinitions>
        <RowDefinition Height="140"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <!-- Back button and page title -->
    ...
    <!-- My content grid -->
    <ScrollViewer Grid.Row="1"
      VerticalScrollMode="Disabled" 
        VerticalScrollBarVisibility="Disabled" 
        HorizontalScrollBarVisibility="Visible" 
        ZoomMode="Disabled" 
        HorizontalSnapPointsType="None" 
        VerticalSnapPointsType="None" 
        ZoomSnapPointsType="None">

        // put your content here directly or in a grid
    </ScrollViewer>
    <VisualStateManager>...</VisualStatemanager>
</Grid>
于 2013-04-22T10:12:15.397 回答
1

要解决在滚动查看器中设置对象高度的问题,可以说.. 如果您有一个堆栈面板,请设置 Height="2000" 否则......然后完成。注意:不要在滚动查看器中放置任何高度。

于 2014-03-19T11:53:29.360 回答
0

我有其他建议,我也遇到过类似的问题,但我想禁用弹跳,当翻转视图中只有 1 个元素时。

所以我这样做了:

创建了一个模板控件:

CustomFlipView 和它继承自 FlipView:

public sealed class CustomFlipView : FlipView

接下来,我编辑了 FlipViewStyle 以获得 FlipView 的样式代码(是的,那个大的)。

并复制粘贴到Generic.xaml中,生成

<Style TargetType="local:CustomFlipView">

因此,这让我有机会将名称添加到默认情况下未命名的此类 xaml 控件。

我为 ItemsPresenter 添加了一个名称:

<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 x:Name="FlipViewItemsPresenter"/>
</ScrollViewer>

接下来在 CustomFlipView 的代码中,我这样做了:

public sealed class CustomFlipView : FlipView //this line is indented.
{
    private ItemsPresenter itemsPresenter;

    public CustomFlipView()
    {
        this.DefaultStyleKey = typeof(CustomFlipView);
    }

    protected override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        itemsPresenter = GetTemplateChild("FlipViewItemsPresenter") as ItemsPresenter;
        FixateItems();
    }

    protected override void OnItemsChanged(object e)
    {
        base.OnItemsChanged(e);
        FixateItems();
    }

    private void FixateItems()
    {
        if (itemsPresenter != null)
        {
            if (this.Items.Count < 2)
            {
                itemsPresenter.ManipulationMode = ManipulationModes.None;
            }
            else
            {
                itemsPresenter.ManipulationMode = ManipulationModes.System;
            }
        }
    }
}

希望这能给你一个提示。

于 2015-04-29T09:26:27.623 回答