0

对于一个项目,我们正在尝试使用 WPF 和 Surface SDK 实现一个简单的卡片堆栈。到目前为止一切进展顺利。我们将 LibraryStack 用于卡片组,将 ScatterView 用于从堆栈中取出的卡片。Cards 和 card stack 被实现为从ScatterViewItem和派生的单独的用户控件LibraryStack。拖放功能也可以使用。

但是,LibraryStack 上显示的卡片未对齐,并且每张卡片的方向都不同。有什么办法可以解决这个问题,使卡片都面向同一个方向?

这是 CardDeck 的 XAML 代码:

<s:LibraryStack x:Class="ActionCardAlt.Deck"
            ... (Standard xmlns declarations)
         xmlns:local="clr-namespace:ActionCardAlt"
             mc:Ignorable="d" 
             ItemTemplate="{DynamicResource CardBackground}"
              >
    <s:LibraryStack.Resources>
       <DataTemplate x:Key="CardBackground">
          <Image Source="Images/CardBacksideAlpha.png"> 
       </DataTemplate>
    </s:LibraryStack.Resources>
    <s:LibraryStack.Template>
       <ControlTemplate TargetType="{x:Type s:LibraryStack}">
          <Grid>
             <ItemsPresenter />
          </Grid>
       </ControlTemplate>
    </s:LibraryStack.Template>
</s:LibraryStack>

CardDeck 由以下命令放置:

我会假设,在 DataTemplate 或 DataTemplate 内的 Image 中有一个选项来控制方向。但是,将矩阵设置Image.RenderTransforms为无旋转或单位矩阵没有帮助。

遍历Items属性只改变了方式,当它们被拖出到 ScatterView 时显示。

那么,是否有任何可能的方法可以在 XAML 或背后的代码或任何其他技巧中做到这一点?

非常感谢您提前。

4

1 回答 1

1

我认为这是不可能的,即使试图操纵微软用于 LibraryStackItems 的转换。我自己试过了,没有任何效果。(操作 RotateTransform,添加另一个 RotateTransform 以否定初始 RotateTransform 等)。事件如果您获得零旋转的初始布局,一些奇怪的逻辑会弄乱您的更改。这就是 RotateTransform。还有一个 TranslateTransform ..(还有一个 ScaleTransform 和一个 ScewTransform)

我认为我们只需要接受,这就是控件的工作原理,并且不适合操纵旋转。

所以这是我的建议,基于 Microsoft PixelSense 本身和 Surface-Touch-Pack 上的 SurfaceSDK 的许多项目:

使用单个 ScatterView 来满足您的两个要求:堆栈和用户移除的卡片。堆栈很容易使用 ScatterView 进行编码,并且可以使用 Orientation-property 设置旋转。作为一个很好的副作用,处理堆栈和打开的卡片之间的转换非常容易。

于 2013-04-29T23:31:03.663 回答