WPF ItemsControl数据表动态更新

本文关键字:更新 动态 数据表 ItemsControl WPF | 更新日期: 2023-09-27 18:18:28

我是WPF技术的新手,我想问一下解决我的问题的可能性。

我有ItemsControl,我添加图像:

<ItemsControl  Name="itemscontrol1" 
    ItemsSource="{Binding Path=PicturesList}" ItemTemplate="{StaticResource pictureTemplate}" Grid.Column="1" />

然后是preparedatatemplate:

        <DataTemplate x:Key="pictureTemplate"> 
        <DataTemplate.Resources>
            <Style TargetType="Image">
                <Setter Property="Width" Value="180" />
                <Setter Property="Height" Value="120" />
                <Setter Property="Margin" Value="10" />
            </Style>
        </DataTemplate.Resources>
        <Image Source="{Binding Path=Location}" />
    </DataTemplate>

我的问题是我不知道如何动态改变图像宽度和高度的参数。例如,当我改变窗口的大小时,我需要改变项目控件内图像的大小。

有人能帮帮我吗?

谢谢你的建议和提示。史密斯

WPF ItemsControl数据表动态更新

如果你根据UI的其余部分来控制图像的大小,例如窗口大小,你应该避免将它们设置为显式的值,并选择一个布局面板来为你处理这个问题。例如使控件项面板为wrappanel布局。

  <ItemsPanelTemplate x:key="griditemtemplate">
    <WrapPanel VerticalAlignment="Center"
          HorizontalAlignment="Center"/>
  </ItemsPanelTemplate>

如果你的视图模型中有规定大小的东西,使用绑定。

要做您想做的事情,您需要一个统一的网格,并且能够将列数绑定到集合计数。遗憾的是,据我所知这是做不到的。

因此,我将创建一个自定义布局面板。网上有很多教程,但基本上是创建一个类来扩展Panel,然后覆盖MeasureOverride和ArrangeOverride方法。重要的是衡量……
protected override Size ArrangeOverride(Size finalSize)
{
    int i = 0;
    foreach( UIElement child in InternalChildern)
    {
        var r = new Rect(this.ActualSize / this.InternalChildren.count * i, 0, this.ActualSize / this.InteralChildren.Count, finalSize.Height);
        child.Arrange( r );
        i++;
    }
}

这是我在手机上写的大概代码,所以如果需要重构,我很抱歉。

然后使用此面板作为您的ItemsPanel模板,如前所示。