我需要为具有全屏图像项的Windows应用商店应用创建水平列表视图,类似于Android的Gallery控件。为此,我使用GridView
并将ItemsPanel
模板更改为水平方向的VirtualizingStackPanel
。问题是我无法使图像项目全屏显示。我试过的是让GridView.ItemContainerStyle
绑定到GridView
的宽度,如下所示:
Binding widthBinding = new Binding() { Source=iconsHolder, Path = new PropertyPath("Width"), Converter = new TestItemWidthConverter()};
Style itemStyle = new Style();
itemStyle.TargetType = typeof(GridViewItem);
itemStyle.Setters.Add(new Setter(GridViewItem.WidthProperty, widthBinding));// 800));
iconsHolder.ItemContainerStyle = itemStyle;
例如,当我用800替换widthBinding
时,图标具有指定的宽度,但是当我使用绑定时,没有可见的项目,因此Style
完成其工作,但是Binding
有问题。为了调试这个,我创建了一个假转换器,所以我可以看到绑定是否有效,但是根本没有调用Convert(..)方法。
我的GridView是这样创建的:
GridView iconsHolder = new GridView();
iconsHolder.ItemsPanel = App.Current.Resources["HorizontalVSPTemplate"] as ItemsPanelTemplate;
iconsHolder.ItemTemplate = App.Current.Resources["MyDataTemplate"] as DataTemplate;
iconsHolder.Width = Window.Current.Bounds.Width;
iconsHolder.Height = Window.Current.Bounds.Height;
我的资源定义如下:
<ItemsPanelTemplate x:Key="HorizontalVSPTemplate">
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
<DataTemplate x:Key="MyDataTemplate">
<Image Source="some irrelevant url here"/>
</DataTemplate>
我的转换器看起来像这样:
public sealed class TestItemWidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
Debug.WriteLine(" binding width=" + value);
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{ return value; }
}
我不知道如何实现这一点(我也尝试使用RelativeBinding
或者让图标水平拉伸,但没有成功)或者我做错了,所以请帮忙!
谢谢你的时间!
答案 0 :(得分:0)
我已经弄清楚我走错了路,正确的做法是使用FlipView
,就像
FlipView iconsHolder = new FlipView();
iconsHolder.ItemsSource = myItems;
iconsHolder.ItemTemplate = App.Current.Resources["MyDataTemplate"] as DataTemplate;
现在我的图标默认为全屏,并且滚动效果被分页。有关此控件的一些有用详细信息,请访问:Quickstart: Adding FlipView controls 。