我正在尝试将复选框动态添加到 wpf 中的统一网格中。
但看起来网格没有为它们分配足够的空间,所以它们都有点互相重叠。
这就是我将它们添加到后面的代码中的方法:
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 Grid.Column="1" Grid.RowSpan="3">
<UniformGrid x:Name="unfiformGridSubfolders" Grid.Column="1" Grid.Row="0" Grid.RowSpan="3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</ScrollViewer>
这就是它在程序中的样子:
我只是希望每个复选框都有足够的空间,以便可以充分阅读内容。
do you have to动态添加UI元素?你不能预先定义你的CheckBox
模板并添加CheckBox.Content
反而?如果可能的话定义一个ObservableCollection
其中包含你的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
,它们也会调整到最大CheckBox.Content
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)