如何在silverlight 4中在运行时更改itemsControl中项目的itemTemplate

时间:2010-08-16 22:30:25

标签: silverlight silverlight-3.0 silverlight-4.0

我在Silverlight 4中有一个ItemControl,Canvas作为ItemPanel,我的想法是使用拖动和掺杂项来模拟画布区域。 ItemsControl有一个带有图像和一个按钮的ItemTemplate。

想法是当itemTemplate的按钮单击itemTemplate更改。

我的一些代码: (物品管制)

<ItemsControl ItemsSource="{Binding Devices}"
              ItemTemplate="{StaticResource deviceItemTemplate}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas
                    HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                    MouseLeftButtonDown="Canvas_MouseLeftButtonDown" 
                    MouseMove="Canvas_MouseMove" 
                    LostMouseCapture="Canvas_LostMouseCapture"></Canvas>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>

(ItemTemplate中)

<DataTemplate x:Key="deviceItemTemplate">
    <ContentControl>
        <Grid IsHitTestVisible="True" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition Height="30"></RowDefinition>
            </Grid.RowDefinitions>
            <Image IsHitTestVisible="False" Grid.Row="0" Stretch="UniformToFill" 
                   Width="50" Height="50" 
                   Source="{Binding ImagePath}"/>
            <Button Grid.Row="1" Content="{Binding EditarDispositivoCommand.DisplayName}" Command="{Binding EditarDispositivoCommand.Command}"></Button>
        </Grid>
        <ContentControl.RenderTransform>
            <TranslateTransform X="{Binding X, Mode=TwoWay}" Y="{Binding Y, Mode=TwoWay}"></TranslateTransform>
        </ContentControl.RenderTransform>
    </ContentControl>
</DataTemplate>

我尝试在单击itemTemplate中的按钮时将此项目的模板更改为来自资源的其他模板。

这是可能的还是我采取了不好的方式。非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用DataTemplateSelector for Silverlight - 它不像WPF那样内置,但可以使用一些额外的代码来实现。

以下是CodeProject的一个很好的例子: http://www.codeproject.com/KB/silverlight/SLTemplateSelector.aspx

只需向视图模型添加元素即可指定模板...

答案 1 :(得分:0)

我刚刚使用以下文章来做你的建议。 我为视图定义了两个项目模板,并且可以通过代码隐藏

在运行时以项目方式更改项目模板

http://weblogs.asp.net/psheriff/archive/2010/08/25/change-templates-dynamically-in-silverlight.aspx

希望这会有所帮助 (示例还使用按钮来更改项目模板)

相关问题