改变LibraryStack中显示项目的方向

本文关键字:方向 项目 显示 LibraryStack 改变 | 更新日期: 2023-09-27 18:11:20

对于一个项目,我们正在尝试使用WPF和surface 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或背后的代码或任何其他技巧?

改变LibraryStack中显示项目的方向

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

我认为我们必须接受,这就是控制的工作方式,操纵旋转是不合适的。

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

使用单个ScatterView来满足您的两个需求:堆栈和被用户移除的卡片。堆栈很容易用ScatterView编码,旋转可以用orientation属性设置。作为一个很好的副作用,它确实很容易处理堆栈和打开的卡之间的转换。