改变LibraryStack中显示项目的方向
本文关键字:方向 项目 显示 LibraryStack 改变 | 更新日期: 2023-09-27 18:11:20
对于一个项目,我们正在尝试使用WPF和surface 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时的显示方式。
我认为这是不可能的,即使试图操纵微软正在为LibraryStackItems使用的转换。我自己也试过,没有任何效果。(操纵RotateTransform,添加另一个RotateTransform来否定初始的RotateTransform等)。如果您获得的初始布局为零旋转,则一些奇怪的逻辑将使您的更改变得混乱。这就是RotateTransform。也有一个TranslateTransform ..(以及ScaleTransform和ScewTransform)
我认为我们必须接受,这就是控制的工作方式,操纵旋转是不合适的。
所以这是我的建议,基于微软PixelSense本身和Surface-Touch-Pack上使用SurfaceSDK的许多项目:
使用单个ScatterView来满足您的两个需求:堆栈和被用户移除的卡片。堆栈很容易用ScatterView编码,旋转可以用orientation属性设置。作为一个很好的副作用,它确实很容易处理堆栈和打开的卡之间的转换。