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>
我的问题是我不知道如何动态改变图像宽度和高度的参数。例如,当我改变窗口的大小时,我需要改变项目控件内图像的大小。
有人能帮帮我吗?
谢谢你的建议和提示。史密斯
如果你根据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模板,如前所示。