Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加动态元素时安排问题_C#_Wpf_Xaml - Fatal编程技术网

C# 添加动态元素时安排问题

C# 添加动态元素时安排问题,c#,wpf,xaml,C#,Wpf,Xaml,我正在向屏幕添加动态元素。当元素填满我要放入的容器时,我希望出现一个垂直滚动条,以便用户可以滚动所有添加的元素。代码正在按预期执行 问题是,当元素添加到接口时,它们是以一种随意而怪异的方式添加的。它们从网格元素的中间开始,然后向上移动。我希望将它们添加到控件的左上角,然后再添加到右侧,一直添加到页面下方,行间距相等。然后,当屏幕上有太多内容时,显示滚动条 下面是运行此测试的所有代码。提前感谢您的帮助 xaml: 观察到的效应可以用UniformGrid排列法解释。按钮开始在网格元素的中间,然后向

我正在向屏幕添加动态元素。当元素填满我要放入的容器时,我希望出现一个垂直滚动条,以便用户可以滚动所有添加的元素。代码正在按预期执行

问题是,当元素添加到接口时,它们是以一种随意而怪异的方式添加的。它们从网格元素的中间开始,然后向上移动。我希望将它们添加到控件的左上角,然后再添加到右侧,一直添加到页面下方,行间距相等。然后,当屏幕上有太多内容时,显示滚动条

下面是运行此测试的所有代码。提前感谢您的帮助

xaml:


观察到的效应可以用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;
}