我在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中的按钮时将此项目的模板更改为来自资源的其他模板。
这是可能的还是我采取了不好的方式。非常感谢。
答案 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
希望这会有所帮助 (示例还使用按钮来更改项目模板)