有没有办法以编程方式更改Silverlight中的Data / ItemTemplate?

时间:2010-04-15 18:25:51

标签: silverlight xaml silverlight-4.0

我有一个Listbox,它使用ItemTemplate来显示图像。我希望能够在ItemTemplate中更改显示图像的大小。通过数据绑定,我可以更改宽度,但我能看到如何执行此操作的唯一方法是向我绑定的类添加一个Property(Say,ImageSize),然后更改集合中的每个项目以获得新的ImageSize。是否无法访问该Datatemplate中项目的属性?

E.g。

<navigation:Page.Resources>
    <DataTemplate x:Key="ListBoxItemTemplate">            
        <Viewbox Height="100" Width="100">
             <Image Source="{Binding Image}"/>
        </Viewbox>            
    </DataTemplate>        
</navigation:Page.Resources>
<Grid>
    <ListBox ItemTemplate="{StaticResource ListBoxItemTemplate}" ItemSource="{Binding Collection}"/>
</Grid>

无论如何设置视图框的宽度和高度而不将属性绑定到集合中的每个元素?

2 个答案:

答案 0 :(得分:3)

您可以使用元素绑定。尝试这样的事情:

<UserControl.Resources>        
  <DataTemplate x:Key="ListBoxItemTemplate">            
    <Viewbox Height="{Binding Value, ElementName=slider1}" 
             Width="{Binding Value, ElementName=slider1}">
      <Image Source="{Binding Image}"/>
    </Viewbox>                          
  </DataTemplate>
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="White">
  <Grid.RowDefinitions>
    <RowDefinition Height="205*" />
    <RowDefinition Height="95*" />
  </Grid.RowDefinitions>
  <ListBox ItemTemplate="{StaticResource ListBoxItemTemplate}"
           ItemSource="{Binding Collection}"/>
  <Slider x:Name="slider1" Value="100" Maximum="250" Grid.Row="1"/>
</Grid>

答案 1 :(得分:0)

如果你知道要调整大小的大小,你可以定义一些不同的ItemTemplate并切换它们。