WinRT ItemsControl具有缩放,水平滚动和居中内容

时间:2012-10-30 14:40:43

标签: c# xaml windows-8 windows-runtime winrt-xaml

我几个小时以来一直在争吵,似乎无法找到解决问题的方法。

我的问题是,我有一个物品控件占据了整个屏幕。它显示水平的图像列表,只能水平滚动。它们垂直居中,最初占据屏幕的33%左右。

我希望用户能够放大到此列表,直到图像占用100%的可用空间。我通过设置Scrollviewer.ZoomEnabled =“true”来完成这项工作。通过将itemscontrols scrollviewer的垂直内容对齐设置为“Center”,应用程序可以在中心周围放大和缩小。

...然而

当我在触摸设备或使用触摸的模拟器上运行时,缩放行为按预期工作直到我使用触摸输入并尝试垂直滚动。

然后物品立即“跳”到底部而不是中心,再次正确定位它们的唯一方法是缩小并再次缩小。

这种行为非常令人沮丧,因为我似乎无法修复它。任何帮助都会受到大力赞赏!

这是重新解决问题的最小解决方案https://skydrive.live.com/redir?resid=EE9DF7D217DF3EA6!1060&authkey=!AJVGrLoTrOz8Hyk

如果您想重新创建代码,请遵循以下代码:

ITEMSCONTROL.XAML

<Style x:Key="ItemsControlStyle" TargetType="ItemsControl">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Horizontal" Margin="90,0" ManipulationMode="TranslateX"/>
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ItemsControl">
                <ScrollViewer ZoomMode="Enabled"
                              VerticalSnapPointsType="None"
                              MinZoomFactor="0.5"
                              VerticalScrollMode="Disabled"
                              VerticalScrollBarVisibility="Disabled"
                              HorizontalScrollMode="Enabled" 
                              HorizontalScrollBarVisibility="Visible"
                              VerticalContentAlignment="Center">
                    <ItemsPresenter VerticalAlignment="Center" IsHitTestVisible="False" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
                </ScrollViewer>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

MAINPAGE.XAML(摘录)

<ItemsControl Grid.Row="1" ItemsSource="{Binding Pages}" Style="{StaticResource ItemsControlStyle}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border Padding="5" VerticalAlignment="Center"  Margin="10">
                    <Border.Background>
                        <ImageBrush ImageSource="../Images/Shadow.png"/>
                    </Border.Background>
                    <Grid>
                        <ProgressRing IsActive="True" VerticalAlignment="Center" HorizontalAlignment="Center" Height="50" Width="50" Foreground="White" Visibility="{Binding HasLoaded, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                    <Image Opacity="0" Source="{Binding LocalUrl, Converter={StaticResource LocalImagePathConverter}}" Height="{Binding Height}" Width="{Binding Width}" ImageOpened="ImageLoaded" />
                    </Grid>
                </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

1 个答案:

答案 0 :(得分:1)

好的,我测试了一下:

  1. 在触摸显示器(本地机器)上 - 工作正常
  2. 在触摸显示器(模拟器)上 - 工作正常
  3. 在Surface RT(远程机器)上工作正常
  4. 在普通显示器(模拟器)上 - 工作正常
  5. 你做过的时候试过过耳朵吗? :)

    我不认为这是一个普遍的问题,因为我无法复制它。