gpt4 book ai didi

wpf - 银光下的 Canvas 装订

转载 作者:行者123 更新时间:2023-12-04 07:59:24 26 4
gpt4 key购买 nike

我正在尝试创建一个 Canvas ,项目位于 Canvas 上指定的位置,因为我无法将源和模板直接绑定(bind)到 Canvas ,我是否使用了 ItemsControl。
但是有一个问题,所有项目都位于 0,0 处。我已经测试了它们不返回 0,0 的绑定(bind)。
我怎样才能完成这项工作,以便将元素放置在正确的位置?

是否可以在 Canvas 上创建 2 个图层,每个图层都绑定(bind)到不同的源并使用不同的模板?

这是在 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 中的绑定(bind)。 .

尝试在 ItemContainerStyle 中设置绑定(bind)因为你的StackPanel不是根元素;您的模板将被放置在 ContentPresenter ,因此您在 StackPanel 中的 Canvas 定位附加属性将被忽略。

<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>

关于wpf - 银光下的 Canvas 装订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4771146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com