【问题标题】:Windows 8 get ItemControl width after databindWindows 8 在数据绑定后获取 ItemsControl 宽度
【发布时间】:2014-02-10 10:53:33
【问题描述】:

我正在使用 Itemcontrol 创建一个 Windows 8 应用程序并绑定数据列表以显示新闻。我需要在 HTML 中创建类似于新闻自动收报机的动画,如链接所示:http://coolcarousels.frebsite.nl/c/9/ 我将如何实现这一目标?

代码:

 <ItemsControl x:Name="lstdata"  >
                <ItemsControl.ItemTemplate  >
                    <DataTemplate   >
                        <!--Date-->
                        <StackPanel Orientation="Vertical" Margin="10,0" HorizontalAlignment="Left" VerticalAlignment="Center" >
                            <TextBlock HorizontalAlignment="Left" Text="{Binding Path=ModifedDate,Converter={StaticResource DatetimeToStringFormatConverter}}" VerticalAlignment="Top" Grid.Row="1"  FontFamily="Segoe UI" FontWeight="Bold" FontSize="13.33" />
                            <TextBlock   Margin="0,0,0,0" Text="{Binding Path=Title , Mode=TwoWay}" Grid.Row="3" HorizontalAlignment="Left" VerticalAlignment="Top" FontFamily="Segoe UI" FontSize="13.33" />
                        </StackPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>


var  newsViewModel = new  NewsViewModel();
          await  newsViewModel.GetNews();
          lstdata.ItemsSource = newsViewModel.NewsList;

动画:

FlipViewNews.RenderTransform = new TranslateTransform();

            DoubleAnimation animateX = new DoubleAnimation();
            animateX.From = 0;
            animateX.To = 200;
            animateX.Duration = TimeSpan.FromMilliseconds(400);

            Storyboard.SetTarget(animateX, FlipViewNews.RenderTransform);
            Storyboard.SetTargetProperty(animateX, "TranslateTransform.X");

            Storyboard story = new Storyboard();
            story.Children.Add(animateX);
            story.RepeatBehavior = RepeatBehavior.Forever;
            story.Begin();

我已经能够制作动画了。上面的代码正在运行,唯一的问题是我需要在绑定所有项目后获取 ItemsControl 实际宽度。我怎样才能得到它,以便我可以在 HTML 中创建一个类似于 marquee 的动画??

【问题讨论】:

  • 您需要在 Xaml 或 C# 中使用一些动画代码。您能否编辑问题以包含您尝试过的内容?如果您使用过 WinJs+HTML,那么克隆会更容易。 :)
  • 我已经进行了更改并添加了代码。但这行不通。另外,我需要根据 itemcontrol 中的项目使其动态化。我将如何实现这一目标?
  • 你是指第一次加载时滚动到底部吗?
  • 我需要获取宽度,以便我可以使用翻译动画(如新闻收报机)为 Itemcontrol 设置动画,因此我需要获取宽度以设置 To 和 From 属性

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


【解决方案1】:

您能否添加一个SizeChanged 侦听器,然后获取元素的ActualWidth 作为响应,因为绑定会影响大小?

http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.frameworkelement.sizechanged.aspx

【讨论】:

  • 我相信如果 itemscontrol 是虚拟化的,如果其他项目比以前的项目大,控件的大小也会随着滚动而改变?
  • 我需要获取宽度,以便我可以使用翻译动画(如新闻收报机)为 Itemcontrol 设置动画,因此我需要获取宽度才能设置 To 和 From 属性..
  • 我明白你的需要,我只是说宽度可以随着itemscontrol内容的变化而变化,所以你可能无法一次获得宽度。您要么需要对ActualWidth 进行数据绑定,要么添加一个SizeChanged 监听器。
  • 当我添加 Size changed 事件时,它不会在我每次添加新项目时给我宽度。
  • 我没有说它改变,我说宽度可以改变。如果项目是 aaa、aaaaaaaa、aaaaaaaaaaaaaaaa、aaaaaaaaaaaaaaaaaaaaaa,则 ActualWidth 可能 会在每次添加项目时更改。它还取决于包含控件,水平对齐/等设置的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
相关资源
最近更新 更多