C# 如何在Windows 8中显示宽度可变的Gridview项目?
我的GridView项目的大小为第一个项目的大小。如何改变这种行为 如何根据内容使用变量C# 如何在Windows 8中显示宽度可变的Gridview项目?,c#,gridview,windows-8,windows-runtime,winrt-xaml,C#,Gridview,Windows 8,Windows Runtime,Winrt Xaml,我的GridView项目的大小为第一个项目的大小。如何改变这种行为 如何根据内容使用变量宽度显示GridView项目 我想显示第一个,但我得到了第二个。有什么建议吗?检查并同时检查希望这有帮助您可以通过将ItemsPanel设置为WrapPanel来创建这样的GridView视图,您可以打开WrapPanel。这是密码 XAML C# 受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e) { var list=新列表() { 新的ViewModel(11
宽度显示GridView项目
我想显示第一个,但我得到了第二个。
有什么建议吗?检查并同时检查
希望这有帮助您可以通过将ItemsPanel
设置为WrapPanel
来创建这样的GridView
视图,您可以打开WrapPanel
。这是密码
XAML
C#
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
var list=新列表()
{
新的ViewModel(110,彩色,LawnGreen),
新的ViewModel(50种颜色,深蓝色),
新的ViewModel(130,彩色,耐火砖),
新ViewModel(60种颜色,RosyBrown),
新ViewModel(100种颜色,印度红),
新的ViewModel(210,颜色:BurlyWood),
新ViewModel(150种颜色,绿松石色)
};
gv.ItemsSource=列表;
}
公共类视图模型
{
公共双MyWidth{get;set;}
公共颜色MyColor{get;set;}
公共视图模型(双色_MyWidth,彩色_MyColor)
{
我的宽度=_我的宽度;
MyColor=\u MyColor;
}
}
这是我的解决方案
//可变大小栅格视图
public class VariableSizedGridView : GridView
{
protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item)
{
try
{
dynamic gridItem = item;
var typeItem = item as CommonType;
if (typeItem != null)
{
var heightPecentage = (300.0 / typeItem.WbmImage.PixelHeight);
var itemWidth = typeItem.WbmImage.PixelWidth * heightPecentage;
var columnSpan = Convert.ToInt32(itemWidth / 10.0);
if (gridItem != null)
{
element.SetValue(VariableSizedWrapGrid.ItemWidthProperty, itemWidth);
element.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, columnSpan);
element.SetValue(VariableSizedWrapGrid.RowSpanProperty, 1);
}
}
}
catch
{
element.SetValue(VariableSizedWrapGrid.ItemWidthProperty, 100);
element.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 1);
element.SetValue(VariableSizedWrapGrid.RowSpanProperty, 1);
}
finally
{
base.PrepareContainerForItemOverride(element, item);
}
}
//集合视图源
<CollectionViewSource x:Name="collectionViewSource"
Source="{Binding ImageList,Mode=TwoWay}"
IsSourceGrouped="False"
ItemsPath="Items" />
//可变大小网格视图xaml
<controls:VariableSizedGridView x:Name="ImageGridView"
AutomationProperties.AutomationId="ImageGridView"
ItemsSource="{Binding Source={StaticResource collectionViewSource}}"
IsItemClickEnabled="True"
TabIndex="1" >
<controls:VariableSizedGridView.ItemTemplate>
<DataTemplate>
<Grid Height="300" >
<Image Stretch="Uniform" Source="{Binding WbmImage}" />
</Grid>
</DataTemplate>
</controls:VariableSizedGridView.ItemTemplate>
<controls:VariableSizedGridView.ItemsPanel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid ItemWidth="10" ItemHeight="300" Orientation="Vertical"/>
</ItemsPanelTemplate>
</controls:VariableSizedGridView.ItemsPanel>
</controls:VariableSizedGridView>
可能会有帮助@Xyroid谢谢,但您提供了分组gridview的链接。我正在寻找没有分组的GridView本身。好的,我将发布解决方案。嗨,这个链接帮助我找到了简单的解决方案嗨,这个链接帮助我找到了简单的解决方案
<CollectionViewSource x:Name="collectionViewSource"
Source="{Binding ImageList,Mode=TwoWay}"
IsSourceGrouped="False"
ItemsPath="Items" />
<controls:VariableSizedGridView x:Name="ImageGridView"
AutomationProperties.AutomationId="ImageGridView"
ItemsSource="{Binding Source={StaticResource collectionViewSource}}"
IsItemClickEnabled="True"
TabIndex="1" >
<controls:VariableSizedGridView.ItemTemplate>
<DataTemplate>
<Grid Height="300" >
<Image Stretch="Uniform" Source="{Binding WbmImage}" />
</Grid>
</DataTemplate>
</controls:VariableSizedGridView.ItemTemplate>
<controls:VariableSizedGridView.ItemsPanel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid ItemWidth="10" ItemHeight="300" Orientation="Vertical"/>
</ItemsPanelTemplate>
</controls:VariableSizedGridView.ItemsPanel>
</controls:VariableSizedGridView>