C# 添加动态元素时安排问题
我正在向屏幕添加动态元素。当元素填满我要放入的容器时,我希望出现一个垂直滚动条,以便用户可以滚动所有添加的元素。代码正在按预期执行 问题是,当元素添加到接口时,它们是以一种随意而怪异的方式添加的。它们从网格元素的中间开始,然后向上移动。我希望将它们添加到控件的左上角,然后再添加到右侧,一直添加到页面下方,行间距相等。然后,当屏幕上有太多内容时,显示滚动条 下面是运行此测试的所有代码。提前感谢您的帮助 xaml:C# 添加动态元素时安排问题,c#,wpf,xaml,C#,Wpf,Xaml,我正在向屏幕添加动态元素。当元素填满我要放入的容器时,我希望出现一个垂直滚动条,以便用户可以滚动所有添加的元素。代码正在按预期执行 问题是,当元素添加到接口时,它们是以一种随意而怪异的方式添加的。它们从网格元素的中间开始,然后向上移动。我希望将它们添加到控件的左上角,然后再添加到右侧,一直添加到页面下方,行间距相等。然后,当屏幕上有太多内容时,显示滚动条 下面是运行此测试的所有代码。提前感谢您的帮助 xaml: 观察到的效应可以用UniformGrid排列法解释。按钮开始在网格元素的中间,然后向
观察到的效应可以用UniformGrid排列法解释。按钮开始在网格元素的中间,然后向上移动,因为在每个按钮添加之后,统一网格的空间越来越少。 如果在按钮属性中添加
VerticalAlignment=VerticalAlignment.Top
,则效果可以平滑
但我建议使用另一个面板:WrapPanel
<Grid>
<StackPanel Orientation="Horizontal">
<StackPanel Width="500">
<StackPanel Orientation="Horizontal">
<Button Name="buttonAddNewPlayer"
Margin="5"
Click="buttonAddNewPlayer_Click"
Content="Add New Player" />
</StackPanel>
<ScrollViewer Height="300"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto">
<WrapPanel Name="playerContainer"
Background="Wheat"
Orientation="Horizontal" />
</ScrollViewer>
</StackPanel>
</StackPanel>
</Grid>
你是说一个小矮人?我设置了它,但没有效果。我将它们都设置为不同的值。零效应。
using log4net;
using System.Windows;
using System.Windows.Controls;
namespace GPWorkouts
{
public partial class MainWindow : Window
{
private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
int x = 1;
public MainWindow()
{
InitializeComponent();
}
private void buttonAddNewPlayer_Click(object sender, RoutedEventArgs e)
{
Button buttonDyno = new Button()
{
Content = x,
Width = 150,
Height = 32,
Margin = new Thickness(5),
};
x++;
playerContainer.Children.Add(buttonDyno);
}
}
}
<Grid>
<StackPanel Orientation="Horizontal">
<StackPanel Width="500">
<StackPanel Orientation="Horizontal">
<Button Name="buttonAddNewPlayer"
Margin="5"
Click="buttonAddNewPlayer_Click"
Content="Add New Player" />
</StackPanel>
<ScrollViewer Height="300"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto">
<WrapPanel Name="playerContainer"
Background="Wheat"
Orientation="Horizontal" />
</ScrollViewer>
</StackPanel>
</StackPanel>
</Grid>
private void buttonAddNewPlayer_Click(object sender, RoutedEventArgs e)
{
Button buttonDyno = new Button
{
Content = x,
Width = 150,
Height = 32,
Margin = new Thickness(5),
VerticalAlignment = VerticalAlignment.Top,
HorizontalAlignment = HorizontalAlignment.Center
};
x++;
playerContainer.Children.Add(buttonDyno);
// ensure 2 controls per row
playerContainer.ItemWidth = playerContainer.ActualWidth/2;
}