对于一个项目,我们尝试使用WPF和表面SDK实现一个简单的卡片堆栈。到目前为止,一切进展顺利。
我们使用LibraryStack作为卡片组,使用ScatterView作为从堆栈中取出的卡片。
卡片以及卡片堆栈都是作为从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或后面的代码或任何其他技巧中做到这一点?
非常感谢你。
答案 0 :(得分:1)
我认为这是不可能的,即使试图操纵微软用于LibraryStackItems的转换也是如此。我自己尝试过,没有任何工作。 (操作RotateTransform,添加另一个RotateTransform以取消初始RotateTransform等)。事件如果你得到零旋转的初始布局,一些我们的逻辑将搞乱你的更改。这就是RotateTransform。还有一个TranslateTransform ..(以及一个ScaleTransform和一个ScewTransform)
我认为我们必须接受,这就是控制如何工作以及它不适合操纵旋转。
所以这是我的建议,基于Microsoft PixelSense本身的SurfaceSDK和Surface-Touch-Pack的许多项目:
使用单个ScatterView满足您的两个要求:用户删除了堆栈和卡片。可以使用ScatterView轻松编码堆栈,可以使用Orientation属性设置Rotation。 而且作为一个很好的副作用,它很容易处理堆栈和打开的卡之间的过渡。