我正在尝试动态地将复选框添加到wpf中的uniformgrid。 但看起来网格没有为它们分配足够的空间,所以它们都有点相互叠加。 这是我在代码中添加它们的方式:
foreach (string folder in subfolders)
{
PathCheckBox chk = new PathCheckBox();
chk.Content = new DirectoryInfo(folder).Name;
chk.FullPath = folder;
chk.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
chk.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
unfiformGridSubfolders.Children.Add(chk);
}
这就是我的XAML外观(我将uniformgrid放在scrollviewer中)
<ScrollViewer Grid.Column="1" Grid.RowSpan="3">
<UniformGrid x:Name="unfiformGridSubfolders" Grid.Column="1" Grid.Row="0" Grid.RowSpan="3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</ScrollViewer>
这就是它在程序中的表现:
我只是希望每个checkBox都有足够的空间,以便可以完全读取内容。
答案 0 :(得分:4)
你必须动态添加UI元素吗?您不能预先定义CheckBox
模板并添加CheckBox.Content
吗?如果可能,请定义包含ObservableCollection
的{{1}},如下所示:
CheckBox.Content
然后定义public ObservableCollection<string> SubfolderNames { get; set; }
并将其ItemsControl
绑定到您的收藏集:
ItemsSource
这样,所有商品的宽度与共享尺寸组的宽度相同,而且因为它们的尺寸为 <ItemsControl Grid.Row="0" x:Name="gridSubfolders" ItemsSource="{Binding SubfolderNames}" Grid.IsSharedSizeScope="True">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="50" />
</Grid.ColumnDefinitions>
<Border Margin="5" BorderThickness="1" BorderBrush="Black">
<CheckBox Content="{Binding}"/>
</Border>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
,所以它们的尺寸也会达到最大Auto
。
答案 1 :(得分:2)
我建议使用类似WrapPanel
然后我怎么做,每个单元格的大小都是具有最大内容的checkBox?
使用UniformGrid您必须手动浏览每个复选框,检查其大小,并将Uniform Grid.Columns修改为类似Math.Floor(Grid.CurrentWidth / CheckBoxMaxWidth)
答案 2 :(得分:0)
当if (1 === 1)
的{{1}}和Rows
属性都设置为零时,Columns
会尝试在方块中布置元素而不考虑其大小元素。我会编写一个面板,根据您的需要布置您的元素,如下所示。只需在XAML中使用UniformGrid
代替UniformGrid
。
MyPanel