我正在尝试创建一个画布,其中的项目位于canvast上的specefied位置,因为我无法将源和模板直接绑定到Canvas,我使用了ItemsControl.
但是有一个问题,所有项目都位于0,0.我测试了Bindings他们没有返回0,0.
我如何使这项工作,以便项目位于正确的位置?
但是有一个问题,所有项目都位于0,0.我测试了Bindings他们没有返回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中都不起作用,因为它依赖于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>
编辑:如果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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。