我是WPF技术的新手,我想问一下解决问题的可能性。
我有ItemsControl,我在其中添加图片:
<ItemsControl Name="itemscontrol1"
ItemsSource="{Binding Path=PicturesList}" ItemTemplate="{StaticResource pictureTemplate}" Grid.Column="1" />
然后我准备了Datatemplate:
<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>
我的问题是,我不知道如何动态更改图像宽度和高度的参数。例如,当我更改窗口大小时,我需要更改项目控件内图像的大小。
有人可以帮助我吗?
感谢您的建议和提示。 史密斯
答案 0 :(得分:0)
如果你根据UI的其余部分控制图像的大小,即窗口大小,你应该避免将它们设置为显式值,并选择一个布局面板来处理这个问题。比如使控件项面板成为一个wrappanel布局。
<ItemsPanelTemplate x:key="griditemtemplate">
<WrapPanel VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</ItemsPanelTemplate>
如果视图模型中有某些内容决定了大小,请使用绑定。
要专门执行您想要的操作,您需要一个统一的网格,并能够将列数绑定到集合计数。不幸的是,根据我的知识,这不可能做到。
因此,我创建了一个自定义布局面板。很多教程available online,但基本上创建了一个扩展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模板,如前所示。