【问题标题】:Updating a stackpanel in wpf dynamically doesn't reflect changes in UI动态更新 wpf 中的堆栈面板不会反映 UI 中的更改
【发布时间】:2015-07-16 15:45:17
【问题描述】:

xaml 中的堆栈面板:

 <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();

但布局保持不变,只有一个文本框。我也尝试过事先清理孩子,但效果不佳。

【问题讨论】:

  • 您是否正在为要添加的矩形设置大小(宽度、高度)?如果不是,它可能只是因为尺寸不可见。添加内容后,尝试在 Mypanel.Children 的控制台计数中写出。
  • 是的,很抱歉我遗漏了那部分,不想在这里混乱。宽度和高度是成比例的,应该适合。当我检查控制台中的计数时,它会显示正确的孩子数,在本例中为 2
  • 我不明白你的问题?您必须务实地向 stackpanel 添加控件吗? @Mefhisto1
  • 是的,但没有反映更改(矩形未显示)
  • 你什么时候调用这个方法MyPanel.Children.Add(...)

标签: c# wpf


【解决方案1】:
<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>

MainWindow.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)
                });
            }
        }              
    }
}

【讨论】:

    【解决方案2】:

    我会回避代码隐藏逻辑。

    如果您在 XAML 中创建一个矩形作为 DataTemplate,然后依靠面板的 ItemsSource 属性而不是附加矩形会怎样?

    通过DataBinding,您的数据模板将自动为您映射。

    【讨论】:

      猜你喜欢
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2011-07-11
      • 2013-08-03
      • 2019-12-13
      相关资源
      最近更新 更多