将复选框添加到UniformGrid

时间:2015-05-31 12:53:35

标签: c# wpf checkbox uniformgrid

我正在尝试动态地将复选框添加到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>  

这就是它在程序中的表现:

enter image description here

我只是希望每个checkBox都有足够的空间,以便可以完全读取内容。

3 个答案:

答案 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