我只是尝试统一网格,它是如何工作的.
代码:
<UniformGrid Name="uniformGrid1" Rows="2" Columns="3">
<Button Content="Rohit" Grid.Row="0" Grid.Column="0" />
<Button Content="asit" Grid.Row="0" Grid.Column="2" />
</UniformGrid>
Run Code Online (Sandbox Code Playgroud)
我发现两个按钮彼此相邻放置,但它们之间存在一列.为什么会这样?(在统一网格中,每个单元格大小相似,它们之间应该有一个单元格)
理解为什么它是这样(通过回答),但仍然好奇知道Attached属性的重要性 - Grid.Row&Grid.Column如果他们什么也不做?
是否可以在UniformGrid中执行行/列跨度?使用网格附加属性
Grid.RowSpan
和
Grid.ColumnSpan
在UniformGrid上不起作用.
我正在使用UniformGrid
,它正在使项目水平显示.有没有办法让它垂直显示?
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="3" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
默认情况下,UniformGrid会显示它的子项,如下所示:
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
我想如下:
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我需要显示位于特定路径中的所有文件.我创建了一个用户控件,其中包含文件详细信息的文本块(名称,大小,扩展名等),此控件将是统一网格的子控件.
问题是,如果我的uniformgrid是5x5,并且我有超过25个文件,则不会显示第26个元素.
我想知道,有没有办法滚动统一网格的内容?
我知道我可以使用列表框和绑定(我还在阅读它),但是我需要以编程方式添加控件,因为控件有一个事件,并且当用户控件的新实例我订阅它时已创建,然后添加到子数组.
我已经看过这篇文章了,我已经将uniforgrid放在了ItemsControl中,但它根本不起作用,这是我的xaml:
<ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" >
<ItemsControl x:Name="gridArchivos">
<ItemsControl.ItemsPanel >
<ItemsPanelTemplate >
<UniformGrid Columns="5" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
根据帖子,只需要指定cols或rows,而不是两者.所以,只有5个小马.我不希望hrizontal滚动,只需垂直.
谢谢你的时间.
我编写了一个显示一些图像的小应用程序。为此,我使用了一个UniformGrid
. 我的xaml
代码:
<ScrollViewer>
<ItemsControl ItemsSource="{Binding Images}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Name="unifomGrid" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling" VirtualizingPanel.IsVirtualizingWhenGrouping="True" IsItemsHost="True" Loaded="unifomGrid_Loaded" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<materialDesign:Card Padding="32px" Margin="8px">
<StackPanel>
<StackPanel>
<Image Source="{Binding Path, Mode=OneWay}" />
</StackPanel>
</StackPanel>
</materialDesign:Card>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
结果如下:
我的问题是,行高UniformGrid
不是动态的。是否有可能每一行都有自己的行高?目前每行的高度是 内最高元素的高度UniformGrid
。
我为ItemsPanelTemplate使用UniformGrid有一个列表框.这是一张照片列表.我希望照片在网格的每个单元格的中心水平居中,但似乎无论我做什么,图像都对齐到每个单元格的左侧.这是我目前的XAML:
<Border BorderThickness="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" DockPanel.Dock="Right">
<ListBox Name="PhotosListBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid IsItemsHost="True" HorizontalAlignment="Center"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Path=photo}" HorizontalAlignment="Center"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Border>
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我将DataTemplate中的Image控件设置为HorizontalAlignment ="Center",我认为会这样做,但它不起作用.
我究竟做错了什么?
我认为这是一个有点棘手的问题.
我有一个ListBox必须呈现一些图像,每个图像必须放在一个矩形或方形边框内.我知道,这很简单.事实是,这个列表框必须每行显示3个元素,无论是屏幕分辨率还是窗口大小.
为了获得它我像这样模板化列表框:
<ListBox Grid.Column="2" Grid.Row="1" x:Name="_productsLB" SelectedIndex="0"
ItemsSource="{Binding Products}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
HorizontalContentAlignment="Stretch">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="3" Rows="4"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderThickness="1" Background="White" BorderBrush="Black" Margin="8"
Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
<Image Source="{Binding ImagePath}" Stretch="Uniform"/>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
问题是我获得了图像周围的矩形边框,而不是"listboxitem"周围的方形边框.
请记住,我不能指定width属性,因为它们必须依赖于统一的网格列宽度.
你有一些提示吗?
非常感谢!
我有一个包含大量数据的ListView(200多个项目),所以为了节省空间,它使用UniformGrid来显示3列而不是1列
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="3" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
Run Code Online (Sandbox Code Playgroud)
我还修改了样式,以便每个项目都与顶部对齐
<ListView.Resources>
<Style TargetType="{x:Type ListView}">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListViewItem">
<Setter Property="VerticalContentAlignment" Value="Top"/>
</Style>
</Setter.Value>
</Setter>
</Style>
</ListView.Resources>
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是由于显示的数据长度不同,项目组中仍然存在空间浪费,因为大多数数据都适合单行,但偶尔会有一个占用2行或更多行的项目.这意味着当组中只有1行需要额外的空间时,组中的所有行都会占用2行或更多行
有谁知道如何解决这个问题,或者可以建议另一种方法来避免统一网格?谢谢!
我是WPF的新手,我正在使用这段代码用网格填充uniformgrid,
public MainWindow()
{
InitializeComponent();
SolidColorBrush defaultBrush = new SolidColorBrush(Colors.Wheat);
SolidColorBrush alternateBrush = new SolidColorBrush(Colors.Black);
Char L = 'A';
int N = 1;
for (int i = 0; i < 64; i++)
{
Grid cell = new Grid();
if(N==9)
{
N=1;
L++;
}
if ((i + i / 8) % 2 == 0)
{
cell.Name = L + N.ToString();
cell.Background = defaultBrush;
ChessBoard.Children.Add(cell);
}
else
{
cell.Name = L + N.ToString();
cell.Background = alternateBrush;
ChessBoard.Children.Add(cell);
}
N++
}
Run Code Online (Sandbox Code Playgroud)
然后,当我点击名为ChessBoard的uniformedgrid时,我试图找出某个网格的名称.
private …
Run Code Online (Sandbox Code Playgroud) 我正在使用 WPF UniformGrid 绑定项目列表,xaml 是这样的
<ListBox Name="lviewSearch" ItemsSource="{Binding SearchSettingsCollection}" SelectionMode="Multiple">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<ItemsControl Margin="3" Padding="5">
<DockPanel>
<Label Content="{Binding Label}" HorizontalAlignment="Stretch" Cursor="Hand" />
</DockPanel>
</ItemsControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
但是,如果项目数量较少,则行之间的间距太大,如下所示 https://i.stack.imgur.com/Xr5qy.png
我怎样才能减少这个?
我有一个ItemsControl
计划主持水果对象列表.我有一个Fruit
对象列表都有自己的DataTemplate
s.我有一个Grape
物体,一个Orange
物体和一个Kiwi
物体.
我想使用a UniformGrid
使所有单元格具有相同的大小,但我希望Kiwi
对象只跨越1个单元格,我希望Grape
跨越2个单元格(ColumnSpan = 2
)并且我希望Orange
控件跨越4个单元格(ColumnSpan = 2
和RowSpan = 2
)
我怎么能做到这一点?
如何创建布局容器,我可以作为使用ItemsPanel
的ItemsControl
是堆叠在两列的项目,并使用正确的列未在左边的列(足够的空间像一个统一的网格包裹混合剩余项目面板)。
例如:
高度几乎相同的四个项目将显示如下:
其中两个宽度明显较小的四个项目将显示如下:
uniformgrid ×13
wpf ×13
c# ×5
xaml ×5
layout ×2
listview ×2
grid ×1
height ×1
itemscontrol ×1
itemspanel ×1
row ×1
scrollviewer ×1
wpf-controls ×1
wrappanel ×1