【发布时间】:2019-09-02 20:07:30
【问题描述】:
我正在尝试从后面的代码创建一个DataTemplate,但在ItemsControl 中使用它,只显示一个项目...
如果我在 XAML 中描述 DataTemplate,我拥有所有项目。
我使用这里描述的代码来创建我的DataTemplate:https://stackoverflow.com/a/25428280/9725495
完整的 XAML:
<ItemsControl ItemsSource="{Binding Radios}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Height="40">
<TextBlock Text="{Binding Name}" TextTrimming="CharacterEllipsis" Margin="6" HorizontalAlignment="Left" VerticalAlignment="Center" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这是我的代码:
var grid = new Grid();
grid.Height = 40;
var textblock = new TextBlock();
textblock.SetBinding(TextBlock.TextProperty, "Name");
textblock.Margin = new Thickness(6);
textblock.TextTrimming = TextTrimming.CharacterEllipsis;
textblock.HorizontalAlignment = HorizontalAlignment.Left;
textblock.VerticalAlignment = VerticalAlignment.Center;
grid.Children.Add(textblock);
RadioDataTemplate = TemplateGenerator.CreateDataTemplate(() => grid);
<ItemsControl ItemsSource="{Binding Radios}" ItemTemplate="{Binding RadioDataTemplate}" />
编辑:
SharedSizeGroup 的问题
RadioDataTemplate = TemplateGenerator.CreateDataTemplate(() =>
{
var grid = new Grid();
grid.Height = 40;
for (int i = 1; i <= 2; i++)
{
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
if (i < 2)
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Auto), SharedSizeGroup = "A" });
}
var image = new Image();
image.SetBinding(Image.SourceProperty, "Image");
image.Stretch = System.Windows.Media.Stretch.Uniform;
RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.HighQuality);
image.HorizontalAlignment = HorizontalAlignment.Center;
image.VerticalAlignment = VerticalAlignment.Center;
grid.Children.Add(image);
Grid.SetColumn(image, 0);
var gridsplitter = new GridSplitter();
gridsplitter.HorizontalAlignment = HorizontalAlignment.Stretch;
gridsplitter.Width = 5;
gridsplitter.Background = new SolidColorBrush(Colors.Red);
grid.Children.Add(gridsplitter);
Grid.SetColumn(gridsplitter, 1);
var textblock = new TextBlock();
textblock.SetBinding(TextBlock.TextProperty, "Name");
textblock.Margin = new Thickness(6);
textblock.TextTrimming = TextTrimming.CharacterEllipsis;
textblock.HorizontalAlignment = HorizontalAlignment.Left;
textblock.VerticalAlignment = VerticalAlignment.Center;
grid.Children.Add(textblock);
Grid.SetColumn(textblock, 2);
return grid;
});
【问题讨论】:
标签: c# wpf datatemplate itemscontrol