我正在尝试创建一个画布,其中的项目位于画布上的指定位置,因为我无法将源和模板直接绑定到画布,我是否使用了 ItemsControl。
但有一个问题,所有的项目都位于 0,0。我已经测试了绑定,它们不返回 0,0。
我怎样才能完成这项工作,使物品位于正确的位置?
是否可以在画布上创建 2 个图层,其中每个图层绑定到不同的源,并使用不同的模板?
这是在 Silverlight 中
<ItemsControl Grid.Row="1" Grid.Column="1"
Width="650" Height="650"
ItemsSource="{Binding Skills}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Margin="0"
Width="650" Height="650" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Canvas.Top="{Binding Top}" Canvas.Left="{Binding Left}">
<TextBlock Text="{Binding Name}" />
<Image Source="{Binding Icon}" />
<StackPanel Orientation="Horizontal" >
<TextBlock FontWeight="Bold" TextAlignment="Center" Text="{Binding SkillPointsStatusText}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
使用 ItemContainerStyle 进行测试
<ItemsControl Grid.Row="1" Grid.Column="1"
Width="650" Height="650"
ItemsSource="{Binding Skills}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Margin="0"
Width="650" Height="650" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" />
<Image Source="{Binding Icon}" />
<TextBlock FontWeight="Bold" TextAlignment="Center" Text="{Binding SkillPointsStatusText}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Top" Value="{Binding Top}" />
<Setter Property="Canvas.Left" Value="{Binding Left}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
好吧,我已经放弃了这个项目,但如果有人有答案,我将保留这个问题
以下所有内容在 SL4 中不起作用,因为它依赖于 a 中的绑定Setter.Value
.
尝试在中设置绑定ItemContainerStyle
自从你的StackPanel
不是根元素;您的模板将被放置在ContentPresenter
,因此您的画布定位附加属性StackPanel
将被忽略。
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Top" Value="{Binding Top}" />
<Setter Property="Canvas.Left" Value="{Binding Left}" />
</Style>
</ItemsControl.ItemContainerStyle>
Edit:如果Silverlight不支持ItemContainerStyle
您可以设置通用样式ContentPresenters
这应该同样有效:
<ItemsControl ItemsSource="{Binding Data}">
<ItemsControl.Resources>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
</Style>
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
...
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)