加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何在Windows 8 Metro(C/XAML)中制作循环/循环ScrollViewer

发布时间:2020-12-14 02:27:14 所属栏目:Windows 来源:网络整理
导读:在 Windows 8 Metro应用程序中,是否可以创建ScrollViewer,在到达视图中的最后一项时,它会循环回到视图中的第一项?如果是这样,我怎样才能达到这个效果? 解决方法 这绝对是可能的.我现在正在解决这个问题,并在完成后发布工作.到目前为止它类似于下面的内容.
在 Windows 8 Metro应用程序中,是否可以创建ScrollViewer,在到达视图中的最后一项时,它会循环回到视图中的第一项?如果是这样,我怎样才能达到这个效果?

解决方法

这绝对是可能的.我现在正在解决这个问题,并在完成后发布工作.到目前为止它类似于下面的内容.

这个想法是你挂钩到滚动查看器的viewchanged事件,当你移动栏时它会触发.在那里,计算你在偏移量和项目大小的位置,然后你可以使用它来衡量列表框容器的实际大小或你有什么.

一旦您知道自己在偏移中的位置并知道列表框的实际高度和项目的高度,就会知道哪些项目当前可见,哪些项目不可见.确保绑定到对象的列表是一个可观察的集合,它实现了具有双向绑定的INotifyChanged接口.然后,您可以定义一组对象,以根据滚动中的位置来回旋转.

另一个选择是尝试一个不同的起点,也许是一个带有选框和一个滚动条的控件?

XAML
????
????
????????
????????????
????????????????
????????????????????
????????????????????
????????????????
????????????????
????????????????
????????????
????????

</UserControl.Resources>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
<ScrollViewer x:Name="ScrollViewer1">
    <ListBox x:Name="SampleListBox" Background="White" ItemsSource="{Binding Path=sampleItems}" ItemTemplate="{StaticResource sampleTemplate}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.Row="0" Grid.RowSpan="2">

    </ListBox>
</ScrollViewer>
</Grid>

代码背后

public sealed partial class MainPage : Page
{
    List<SampleItem> sampleItems;
    const int numItems = 15;
    public MainPage()
    {
        sampleItems = new List<SampleItem>();
        for (int i = 0; i < numItems; i++)
        {
            sampleItems.Add(new SampleItem(i));
        }
        this.InitializeComponent();
        SampleListBox.ItemsSource = sampleItems;
        ScrollViewer1.ViewChanged += ScrollViewer1_ViewChanged;
    }
    void ScrollViewer1_ViewChanged(object sender,ScrollViewerViewChangedEventArgs e)
    {
        ScrollViewer viewer = sender as ScrollViewer;
        ListBox box = viewer.Content as ListBox;
        ListBoxItem lbi = box.ItemContainerGenerator.ContainerFromIndex(0) as ListBoxItem;
        double elementSize;
        if (lbi == null)
            return;
        elementSize = lbi.ActualHeight;

    }        /// <summary>
    /// Invoked when this page is about to be displayed in a Frame.
    /// </summary>
    /// <param name="e">Event data that describes how this page was reached.  The Parameter
    /// property is typically used to configure the page.</param>
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
    }
}

public class SampleItem
{
    public String ItemCount { get; set; }
    public SampleItem(int itemCount)
    {
        ItemCount = itemCount.ToString();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读