C# Windows 8在数据绑定后获取ItemControl宽度
我正在使用Itemcontrol创建一个Windows 8应用程序,并绑定数据列表以显示新闻。我需要在HTML中创建动画,如链接中所示: 我将如何实现这一点 代码:C# Windows 8在数据绑定后获取ItemControl宽度,c#,xaml,windows-8,windows-runtime,winrt-xaml,C#,Xaml,Windows 8,Windows Runtime,Winrt Xaml,我正在使用Itemcontrol创建一个Windows 8应用程序,并绑定数据列表以显示新闻。我需要在HTML中创建动画,如链接中所示: 我将如何实现这一点 代码: 我已经能够制作动画了。上面的代码正在工作。唯一的问题是,我需要在所有项目绑定后获取ItemsControl实际宽度。我该如何得到它,以便在HTML中创建一个类似marquee的动画???能否添加一个SizeChanged侦听器,然后获得元素的实际宽度作为响应,因为绑定会影响大小 您需要在Xaml或C#中使用一些动画代码。请你编辑一下
我已经能够制作动画了。上面的代码正在工作。唯一的问题是,我需要在所有项目绑定后获取ItemsControl实际宽度。我该如何得到它,以便在HTML中创建一个类似marquee的动画???能否添加一个
SizeChanged
侦听器,然后获得元素的实际宽度作为响应,因为绑定会影响大小
您需要在Xaml或C#中使用一些动画代码。请你编辑一下这个问题,把你试过的内容包括进去好吗?如果您使用的是WinJs+HTML,那么克隆就更容易了。:)我已经做了更改并添加了代码。但这是行不通的。另外,我需要根据itemcontrol中的项目使其动态化。我该如何实现这一点?你是指第一次加载时底部的滚动吗?我需要获得宽度,这样我就可以像新闻播报器一样使用平移动画来设置Itemcontrol的动画,所以我需要获得宽度,以便设置到和来自属性我相信如果itemscontrol是虚拟化的,如果更多的项目比以前的项目大,则控件的大小也会随着您的滚动而改变?我需要获得宽度,这样我就可以使用翻译动画来设置Itemcontrol的动画,就像新闻播报器一样,因此我需要获得宽度,以便设置到和从属性..我了解您需要什么,我只是说宽度可以随着itemscontrol内容的变化而变化,所以您可能无法一次性获得宽度。您需要将数据绑定到
ActualWidth
,或者添加一个SizeChanged
侦听器。当我添加Size changed事件时,它不会在每次添加新项目时都给出宽度。我没有说它会改变,我说宽度可以改变。如果项目为aaa、AAAAAA、AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,则每次添加项目时,ActualWidth
可能会更改。它还取决于包含控件、水平对齐/etc的设置。
<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();