C# 如何在WrapPanel中将VerticalContentAlignment设置为top?
我有一个垂直对齐的包装 我的问题是,每当元素溢出时,它就会转到下一列。因此,第一列中的项目将均匀地垂直对齐 示例:假设包装袋的高度为170px,包装袋的项目高度为35px。因此,它将显示第一列中的前4个元素,这些元素将均匀分布。其余项目将转移到下一列,依此类推。在170px高度中,我希望这些项目使用它们所需的高度,并保留额外的空间。所以在140px之后,我应该得到30px的空闲空间 我没有从WrapPanel的属性中得到任何方法来实现这一点,因为它只有很少的属性来支持其项目的布局和样式C# 如何在WrapPanel中将VerticalContentAlignment设置为top?,c#,wpf,wrappanel,C#,Wpf,Wrappanel,我有一个垂直对齐的包装 我的问题是,每当元素溢出时,它就会转到下一列。因此,第一列中的项目将均匀地垂直对齐 示例:假设包装袋的高度为170px,包装袋的项目高度为35px。因此,它将显示第一列中的前4个元素,这些元素将均匀分布。其余项目将转移到下一列,依此类推。在170px高度中,我希望这些项目使用它们所需的高度,并保留额外的空间。所以在140px之后,我应该得到30px的空闲空间 我没有从WrapPanel的属性中得到任何方法来实现这一点,因为它只有很少的属性来支持其项目的布局和样式 如何做到
如何做到这一点?下面是一个使用UniformGrid的示例,它可能接近您想要实现的目标 XAML
<Grid>
<ListBox ItemsSource="{Binding GridItemsList}" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="2" Columns="4" FlowDirection="RightToLeft" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding ItemName}" />
<StackPanel.LayoutTransform>
<RotateTransform Angle="-90"/>
</StackPanel.LayoutTransform>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.LayoutTransform>
<RotateTransform Angle="-90"/>
</ListBox.LayoutTransform>
</ListBox>
</Grid>
代码隐藏
public partial class UniformGridWindow : Window {
public UniformGridWindow() {
//Sample Data
GridItemsList = new List<GridItem> {
new GridItem("Item 1"),
new GridItem("Item 2"),
new GridItem("Item 3"),
new GridItem("Item 4"),
new GridItem("Item 5"),
new GridItem("Item 6"),
new GridItem("Item 7"),
new GridItem("Item 8")
};
InitializeComponent();
this.DataContext = this;
}
public List<GridItem> GridItemsList { get; set; }
}
public class GridItem {
public string ItemName { get; set; }
public GridItem(string itemName) {
this.ItemName = itemName;
}
}
public分部类UniformGridWindow:Window{
公共UniformGridWindow(){
//样本数据
GridItemsList=新列表{
新项目(“项目1”),
新项目(“项目2”),
新项目(“项目3”),
新项目(“项目4”),
新项目(“项目5”),
新项目(“项目6”),
新项目(“项目7”),
新项目(“项目8”)
};
初始化组件();
this.DataContext=this;
}
公共列表GridItemsList{get;set;}
}
公共类GridItem{
公共字符串ItemName{get;set;}
公共GridItem(字符串itemName){
this.ItemName=ItemName;
}
}
下面是一个使用UniformGrid的示例,它可能接近您想要实现的目标
XAML
<Grid>
<ListBox ItemsSource="{Binding GridItemsList}" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="2" Columns="4" FlowDirection="RightToLeft" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding ItemName}" />
<StackPanel.LayoutTransform>
<RotateTransform Angle="-90"/>
</StackPanel.LayoutTransform>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.LayoutTransform>
<RotateTransform Angle="-90"/>
</ListBox.LayoutTransform>
</ListBox>
</Grid>
代码隐藏
public partial class UniformGridWindow : Window {
public UniformGridWindow() {
//Sample Data
GridItemsList = new List<GridItem> {
new GridItem("Item 1"),
new GridItem("Item 2"),
new GridItem("Item 3"),
new GridItem("Item 4"),
new GridItem("Item 5"),
new GridItem("Item 6"),
new GridItem("Item 7"),
new GridItem("Item 8")
};
InitializeComponent();
this.DataContext = this;
}
public List<GridItem> GridItemsList { get; set; }
}
public class GridItem {
public string ItemName { get; set; }
public GridItem(string itemName) {
this.ItemName = itemName;
}
}
public分部类UniformGridWindow:Window{
公共UniformGridWindow(){
//样本数据
GridItemsList=新列表{
新项目(“项目1”),
新项目(“项目2”),
新项目(“项目3”),
新项目(“项目4”),
新项目(“项目5”),
新项目(“项目6”),
新项目(“项目7”),
新项目(“项目8”)
};
初始化组件();
this.DataContext=this;
}
公共列表GridItemsList{get;set;}
}
公共类GridItem{
公共字符串ItemName{get;set;}
公共GridItem(字符串itemName){
this.ItemName=ItemName;
}
}
您可以使用VariableSizedWrapGrid,就像Contoso Cookbook Windows 8示例中的一样。在那里声明MaximumRowsOrColumns,它会将您的项目包装到另一列(或行)上
这就是您想要的吗?您可以使用VariableSizedWrapGrid,就像Contoso Cookbook Windows 8示例中的一样。在那里声明MaximumRowsOrColumns,它会将您的项目包装到另一列(或行)上
这就是您想要的吗?如果您必须以统一的行数和列数显示项目,那么UniformGrid允许您这样做。例如,每行可以有4个元素,然后下4个元素将占据下一行,依此类推。我唯一不确定的是,你不想先填写这一列,然后再转到下一列。为此,我认为LayoutTransform应该可以工作。如果您必须以统一的行数和列数显示项目,那么UniformGrid允许您这样做。例如,每行可以有4个元素,然后下4个元素将占据下一行,依此类推。我唯一不确定的是,你不想先填写这一列,然后再转到下一列。为此,我认为布局转换应该有效。