【问题标题】:Image in a ScrollViewer in Windows Phone 8.1Windows Phone 8.1 中 ScrollViewer 中的图像
【发布时间】:2015-07-14 09:08:12
【问题描述】:

我有一个 FlipView,它在用户滑动时显示传单的页面。我希望用户能够放大页面。 到目前为止,我发现如果我将 Image 包装在 ScrollViewer 中并设置 ZoomMode = Enabled,则用户可以进行缩放。奇怪的是,如果我放大页面的右侧,当我从屏幕上抬起手指后,它会自动回到左侧。知道如何解决这个问题吗?

XAML:

<Grid Name="grRoot">
    <FlipView x:Name="flipView1"
              BorderBrush="Black"
              ItemsSource="{Binding}">

        <FlipView.ItemTemplate>
            <DataTemplate>
                <ScrollViewer ZoomMode="Enabled" MinZoomFactor="1">
                    <Image Source="{Binding url_dotcom}"
                           Stretch="Fill" 
                           Holding="imgHolding"/>
                </ScrollViewer>
            </DataTemplate>
        </FlipView.ItemTemplate>
    </FlipView>
</Grid>

设置 FlipView 的宽高:

flipView1.Width = Window.Current.Bounds.Width;
flipView1.Height = Window.Current.Bounds.Height;

【问题讨论】:

  • 我在 Windows 8.1 上遇到了非常相似的问题。几乎相同的场景。我发现在 ScrollViewer 上将 Horizo​​ntal 和 Vertical ScrollBarVisibility 设置为 Auto 会有所帮助 - 但是如果渲染的图像大于翻转视图(通常是为了缩放以正常工作),它就会渲染太大。所以我做的另一件事是将网格的最大宽度限制为 Window.Current.Bounds.Width 和最大高度为相同的宽度乘以基于杂志页面格式的比例因子。然后它起作用了。
  • 我编辑了我的问题并发布了 XAML 代码。你能编辑它并写下你所说的吗?

标签: c# windows-runtime windows-phone-8.1 winrt-xaml


【解决方案1】:

试试这样的:

<Grid Name="grRoot">
    <FlipView x:Name="flipView1"
              BorderBrush="Black"
              ItemsSource="{Binding}">

        <FlipView.ItemTemplate>
            <DataTemplate>
                <ScrollViewer ZoomMode="Enabled" MinZoomFactor="1"
                              HorizontalScrollBarVisibility="Auto"
                              VerticalScrollBarVisibility="Auto">
                    <Image Source="{Binding url_dotcom}"
                           Stretch="Fill" 
                           Holding="imgHolding"
                           MaxWidth="{Binding ElementName=YourPage, Path=DataContext.Width}"
                           MaxHeight="{Binding ElementName=YourPage, Path=DataContext.Height}"/>
                </ScrollViewer>
            </DataTemplate>
        </FlipView.ItemTemplate>
    </FlipView>
</Grid>

这里有两个重要的变化:

  • 将 ScrollViewer 的 Horizo​​ntalScrollBarVisibility 和 VerticalScrollBarVisibility 设置为 Auto
  • 将图像的 MaxWidth 和 MaxHeight 绑定到 Window.Current.Bounds.Width 和 Window.Current.Bounds.Height 分别通过 ViewModel 中的 Width 和 Height 公共属性公开,该 ViewModel 是该特定页面的 DataContext。这适用于 FlipView 占据整个页面的情况。如果您需要在页面上缩小 FlipView,请根据您期望/需要/想要的大小在 ViewModel 中设置 Width 和 Height 属性。

编辑: 更多信息在我的博文Why is my zoomable ScrollViewer snapping the image to the left?

【讨论】:

  • 现在唯一的问题是这样,如果我向左滑动转到下一个传单页面,滚动查看器也会检测到该移动并且图像稍微向左移动,导致右侧有一个小间隙边。知道如何解决这个问题(如果可能的话?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多