我有一个WPF UserControl,它是在运行时动态创建的。根据用户交互,创建了1-5个这些控件,并将其添加到UI中。
我在xaml.cs代码隐藏中有一个ObservableCollection<PlayerSpec> PlayerSpecViews
。
最初我尝试使用Grid
并动态添加RowDefinitions
,但这不起作用。控件的尺寸将缩小。
然后我尝试使用ItemsControl,但绑定没有添加Control而是类型名称。
如何使用数据绑定来添加控件并以垂直方式放置?如果需要,奖励信息可能包括垂直滚动条。
我目前的XAML和绑定如下:
<ItemsControl Name="PlayerSpecItems"
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding Source=PlayerSpecViews}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Height="95"
Width="175"
Margin="1">
<local:PlayerSpec/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
课程XAML :
<!-- PlayerSpec -->
<Border Style="{StaticResource InnerBorder}"
HorizontalAlignment="Stretch">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="98"/>
<ColumnDefinition Width="21"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label Style="{StaticResource DefaultFont}"
Grid.Column="0"
Grid.Row="0"
VerticalAlignment="Stretch"
VerticalContentAlignment="Center"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Right"
Margin="1"
Content="Name"/>
<TextBox Style="{StaticResource DefaultFont}"
Name="PlayerName"
Background="Transparent"
Grid.Column="1"
Grid.Row="0"
Margin="1"/>
<Grid Grid.Column="0"
Grid.ColumnSpan="2"
Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
<ColumnDefinition Width="25"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<Label Style="{StaticResource DefaultFont}"
Grid.Column="2"
Grid.Row="0"
VerticalAlignment="Stretch"
VerticalContentAlignment="Center"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
Content="Automaton"/>
<RadioButton GroupName="PlayerTypeGroup"
Name="PlayerAutomaton"
Grid.Column="1"
Grid.ColumnSpan="2"
Grid.Row="0"
Grid.IsSharedSizeScope="True"
VerticalAlignment="Center">
</RadioButton>
<Label Style="{StaticResource DefaultFont}"
Grid.Column="2"
Grid.Row="1"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
Content="Human"/>
<RadioButton GroupName="PlayerType"
Name="PlayerHuman"
Grid.Column="1"
Grid.ColumnSpan="2"
Grid.Row="1"
Grid.IsSharedSizeScope="True"
VerticalAlignment="Center">
</RadioButton>
</Grid>
</Grid>
</Border>
答案 0 :(得分:3)
您的代码问题
所以修改后的代码是
<ScrollViewer>
<ItemsControl Name="PlayerSpecItems"
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding PlayerSpecViews}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:PlayerSpec Margin="1"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
因此,对于您的PlayerSpecViews集合中的每个项目,此代码应该呈现local:PlayerSpec
,并且正确绑定