WPF将静态DataTemplate重写为动态版本

时间:2014-08-27 13:25:18

标签: c# wpf

我想问一下有人用动态重写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" />

一切正常。但我想将此代码重写为动态版本,因为我需要更改属性WidthHeight的值。

我准备了这段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;

但是这段代码不起作用。我不知道问题是什么,但我尽了一切努力。 任何人都可以帮我解决这个问题吗? 谢谢。

1 个答案:

答案 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>