动态更新 wpf 中的堆栈面板不会反映 UI 中的更改

本文关键字:UI wpf 更新 堆栈 动态 | 更新日期: 2024-11-07 00:37:12

xaml 中的 Stackpanel:

 <StackPanel HorizontalAlignment="Right" Width="150" Height="280" Name="MyPanel">
            <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" VerticalAlignment="Top" Width="97"/>
  </StackPanel>

然后,我动态地向该堆栈面板添加一些子项,例如:

MyPanel.Children.Add(new Rectangle { Fill = new SolidColorBrush(Colors.Chartreuse) }, Width=15, Height=15);

我还从代码隐藏调用UpdateLayout

MyPanel.UpdateLayout();

但布局保持不变,只有一个文本框。我也尝试事先清理孩子,但这不起作用。

动态更新 wpf 中的堆栈面板不会反映 UI 中的更改

<Window x:Class="Demo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="650" Width="500"
        xmlns:local="clr-namespace:Demo">
    <Grid>
           <StackPanel Name="MyPanel" />
    </Grid>
</Window>

主窗口.cs

namespace Demo
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {            
        public MainWindow()
        {            
            InitializeComponent();
            for (var i = 0; i < 5; i++)
            {
                MyPanel.Children.Add(new Rectangle
                {
                    Width = 100,
                    Height = 20,
                    StrokeThickness = 1,
                    Stroke = new SolidColorBrush(Colors.Black),
                    Margin = new Thickness(5)
                });
            }
        }              
    }
}

我会回避代码隐藏逻辑。

如果在 XAML 中创建了一个矩形作为数据模板,然后依赖于面板的 ItemsSource 属性来追加矩形,该怎么办?

通过数据绑定,将自动为您映射数据模板。