我想问一下有人用动态重写datatemplate解决我的问题
我准备了DataTemplate
<Window.Resources>
<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>
</Window.Resources>
然后我有了itemcotrol:
<ItemsControl Name="itemscontrol2" Visibility="Hidden"
ItemsSource="{Binding Path=PicturesRight}" ItemTemplate="{StaticResource pictureTemplate}" ItemsPanel="{StaticResource panelTemplate2}" local:DragDropHelper.IsDragSource="true" />
一切正常。但我想将此代码重写为动态版本,因为我需要更改属性Width
和Height
的值。
我准备了这段od代码:
DataTemplate dt = new DataTemplate(typeof(ItemsControl));
var style = new Style(typeof(Image));
var setter = new Setter()
{
Property = Control.WidthProperty,
Value = 200.0
};
style.Setters.Add(setter);
var setter1 = new Setter()
{
Property = Control.HeightProperty,
Value = 150.0
};
style.Setters.Add(setter1);
dt.Resources.Add(typeof(Image), style);
itemscontrol2.ItemTemplate = dt;
但是这段代码不起作用。我不知道问题是什么,但我尽了一切努力。 任何人都可以帮我解决这个问题吗? 谢谢。
答案 0 :(得分:0)
不是在代码中编写DataTemplate,而是在资源部分中执行,如下所示
<Window.Resources>
<DataTemplate x:Key="Temp1">
<TextBlock Text="1"/>
</DataTemplate>
<DataTemplate x:Key="Temp2">
<TextBlock Text="2"/>
</DataTemplate>
</Window.Resources>
<ItemsControl Name="itemscontrol2" ItemTemplate="{StaticResource Temp1}" Foreground="White" ItemsSource="{Binding Lista}"/>
改变C#
itemscontrol2.ItemTemplate = (DataTemplate)Resources["Temp2"];
为什么不使用此类内容动态调整大小
<Grid Background="CadetBlue">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="0.1*"/>
</Grid.RowDefinitions>
<ItemsControl Name="control" ItemsSource="{Binding Lista}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="2.jpg"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button Content="Change" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Click="Button_Click"/>
</Grid>