使用画布作为项目面板模板和绑定 Canvas.Top 不起作用



首先,我正在编写一个使用 C# 和 XAML 为 Windows 8 编写 Windows 应用商店应用程序。我正在使用GridView来显示分组的对象集合。每个组都显示为显示关联项目的单个列。

这工作正常,但我希望每列的ItemsPanel都是Canvas面板。

<GroupStyle.Panel>
    <ItemsPanelTemplate>
        <Canvas />
    </ItemsPanelTemplate>
</GroupStyle.Panel>

现在,我在 xaml 中将Canvas.Top设置为静态数字。这符合预期。

<GridView.ItemContainerStyle>
    <Style TargetType="GridViewItem">
        <Setter Property="Canvas.Top" Value="50" />
    </Style>
</GridView.ItemContainerStyle>

但是如果我使用数据绑定,它不起作用。

<Setter Property="Canvas.Top" Value="{Binding Distance}" />

绑定是否不适用于使用 Visual Studio 2012 进行 Windows 8 应用商店应用开发中的样式和设置?如何解决此问题,以便我可以为属性中的每个项目动态设置 Canvas.Top?

WinRT 不支持样式资源库中的绑定,类似于版本 5 之前的 Silverlight。请参阅此答案,该答案也与ItemContainerStyle中的绑定有关(建议使用某些附加属性的解决方法)。

或者,可以在生成项容器时在代码中设置属性值/绑定 - 对GridView进行子类化,并重写类似 ItemsControl.PrepareContainerForItemOverride 的内容,以设置从项容器到模型项的绑定。

似乎无法将

样式中的属性绑定到 ViewModel。
Canvas.Top 是一种附加财产。
如果要动态更改每个项的属性 Canvas.Top ,可以在代码隐藏中执行此操作。
提取每个GridViewItemCanvas,然后设置其 Top 属性。

最新更新