更改LibraryStack中显示的项目的方向

时间:2013-04-29 22:35:19

标签: c# wpf custom-controls pixelsense

对于一个项目,我们尝试使用WPF和表面SDK实现一个简单的卡片堆栈。到目前为止,一切进展顺利。 我们使用LibraryStack作为卡片组,使用ScatterView作为从堆栈中取出的卡片。 卡片以及卡片堆栈都是作为从ScatterViewItemLibraryStack派生的单独用户控件实现的。 拖放功能也有效。

但是,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或后面的代码或任何其他技巧中做到这一点?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

我认为这是不可能的,即使试图操纵微软用于LibraryStackItems的转换也是如此。我自己尝试过,没有任何工作。 (操作RotateTransform,添加另一个RotateTransform以取消初始RotateTransform等)。事件如果你得到零旋转的初始布局,一些我们的逻辑将搞乱你的更改。这就是RotateTransform。还有一个TranslateTransform ..(以及一个ScaleTransform和一个ScewTransform)

我认为我们必须接受,这就是控制如何工作以及它不适合操纵旋转。

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

使用单个ScatterView满足您的两个要求:用户删除了堆栈和卡片。可以使用ScatterView轻松编码堆栈,可以使用Orientation属性设置Rotation。 而且作为一个很好的副作用,它很容易处理堆栈和打开的卡之间的过渡。