Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式创建包含全屏项目的GridView_C#_Gridview_Data Binding_Winrt Xaml_Windows Store - Fatal编程技术网

C# 以编程方式创建包含全屏项目的GridView

C# 以编程方式创建包含全屏项目的GridView,c#,gridview,data-binding,winrt-xaml,windows-store,C#,Gridview,Data Binding,Winrt Xaml,Windows Store,我需要为带有全屏图像项的Windows应用商店应用程序创建一个水平列表视图,类似于Android的Gallery控件。为此,我使用了GridView并将ItemsPanel模板更改为具有水平方向的virtualzingstackpanel。问题是,我无法使图像项目全屏显示。我尝试的是将GridView.ItemContainerStyle绑定到GridView的宽度,如下所示: Binding widthBinding = new Binding() { Source=iconsHolder,

我需要为带有全屏图像项的Windows应用商店应用程序创建一个水平列表视图,类似于Android的Gallery控件。为此,我使用了
GridView
并将
ItemsPanel
模板更改为具有水平方向的
virtualzingstackpanel
。问题是,我无法使图像项目全屏显示。我尝试的是将
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;
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;
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; }
}
例如,当我将
宽度绑定
替换为800时,图标具有指定的宽度,但是当我使用绑定时,没有可见的项目,因此
样式
完成了它的工作,但是
绑定
有问题。为了调试这个,我创建了一个假转换器,这样我可以看到绑定是否有效,但是根本没有调用Convert(..)方法

我的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;
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;
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; }
}
我的资源定义如下:

<ItemsPanelTemplate x:Key="HorizontalVSPTemplate">
   <VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
<DataTemplate x:Key="MyDataTemplate">
   <Image Source="some irrelevant url here"/>
</DataTemplate>
我不知道如何实现这一点(我也尝试过使用
RelativeBinding
或使图标水平拉伸,但没有成功)或者我做错了什么,所以请帮助!
谢谢你抽出时间

我发现我走错了路,正确的方法是使用
FlipView
,就像

FlipView iconsHolder = new FlipView();
iconsHolder.ItemsSource =  myItems;
iconsHolder.ItemTemplate = App.Current.Resources["MyDataTemplate"] as DataTemplate;
现在,默认情况下,我的图标是全屏的,滚动效果是分页的。有关此控件的一些有用详细信息可在此处找到: