在后面的代码中修改列表框的数据模板属性

时间:2010-11-15 13:49:04

标签: c# wpf xaml datatemplate code-behind

根据下面的代码,我在XAML中有一个列表框。

<ListBox name="myListBox">  
  <ListBox.ItemTemplate>
    <DataTemplate>
       <Image Source="{Binding Path=Image}" Width="175" Height="175" VerticalAlignment="Center" HorizontalAlignment="Center"/>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

在基于条件的运行时,我想使用后面的代码将heightwidth属性更改为另一个值。请有人指导我实现所需的功能。

非常感谢

1 个答案:

答案 0 :(得分:2)

我认为实现这一目标的最简单方法可能是将图像的宽度和高度绑定到两个属性。如果要更改所有图像的宽度和高度,可以在代码后面使用两个属性,如果您希望能够单独执行,那么只需执行相同操作即可绑定到集合项目中的属性。

<ListBox name="myListBox"> 
    <ListBox.ItemTemplate> 
        <DataTemplate> 
            <Image Source="{Binding Path=Image}"
                   Width="{Binding ElementName=myWindow,
                                   Path=ListBoxTemplateWidth}"
                   Height="{Binding ElementName=myWindow,
                                    Path=ListBoxTemplateHeight}"
                   VerticalAlignment="Center"
                   HorizontalAlignment="Center"/> 
        </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

并在后面的代码中定义两个属性

private double m_listBoxTemplateHeight;
public double ListBoxTemplateHeight
{
    get
    {
        return m_listBoxTemplateHeight;
    }
    private set
    {
        m_listBoxTemplateHeight = value;
        OnPropertyChanged("ListBoxTemplateHeight");
    }
}
private double m_listBoxTemplateWidth;
public double ListBoxTemplateWidth
{
    get
    {
        return m_listBoxTemplateWidth;
    }
    private set
    {
        m_listBoxTemplateWidth = value;
        OnPropertyChanged("ListBoxTemplateWidth");
    }
}

if (someCondition == true)
{
    ListBoxTemplateHeight = 200;
    ListBoxTemplateWidth = 200;
}

这样,ListBoxItems将根据图像的宽度/高度增加/减小。