UserControl
アプリケーションでカードを表す次のカスタムがあります。
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:Core="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Namespace="clr-namespace:MyApp" xmlns:Properties="clr-namespace:MyApp.Properties" Core:Class="MyApp.Card" Height="176" RenderTransformOrigin="0.5,0.5" Width="83" UseLayoutRounding="True">
<UserControl.LayoutTransform>
<TransformGroup>
<RotateTransform/>
<ScaleTransform/>
</TransformGroup>
</UserControl.LayoutTransform>
<UserControl.RenderTransform>
<TransformGroup>
<RotateTransform/>
<ScaleTransform/>
</TransformGroup>
</UserControl.RenderTransform>
<UserControl.Resources>
<Namespace:ImagesConverter Core:Key="ImagesConverter"/>
</UserControl.Resources>
<Canvas Core:Name="Layout">
<Image Core:Name="Image" HorizontalAlignment="Left" Source="{Binding Source={Core:Static Properties:Resources.Cards}, Converter={StaticResource ImagesConverter}}" Stretch="None" VerticalAlignment="Top">
<Image.Clip>
<RectangleGeometry Core:Name="Clipping" Rect="0,0,83,176"/>
</Image.Clip>
<Image.RenderTransform>
<TranslateTransform Core:Name="Translation" X="0" Y="0"/>
</Image.RenderTransform>
</Image>
<Rectangle Core:Name="Highlight" Canvas.Left="-2" Canvas.Top="-2" Height="180" Opacity="0.7" Stroke="#FFFFF500" StrokeThickness="3" Visibility="Collapsed" Width="87"/>
</Canvas>
</UserControl>
ご覧のとおり... すべてのカード面を含むビット PNG 画像があり、コンストラクターで新しいカード パスSuit
とRank
列挙値を作成すると、画像の正しいクリッピング四角形と変換が計算されます。すべてが魔法のように機能します... Storyboard
90° の回転が必要な でカードをアニメーション化しようとする場合を除きます。これが私のコードです(これStoryboard
は で定義されていますMainWindow.Resources
):
<DoubleAnimation BeginTime="00:00:00.4" Duration="00:00:00.2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)" To="90"/>
結果は次のとおりです。
何が起こっているのか理解できません... しかし、ご覧のとおり、画像が何らかの形で引き伸ばされ、非常にぼやけてしまいます。UseLayoutRounding="True"
私は自分のカードコントロールで使用しようとしましたが、他の場所で提案さSnapsToDevicePixels="True"
れてMainWindow
いるように...しかし、機能していません! もちろん...LayoutTransform
代わりに使用してカードを回転させると、RenderTransform
すべてが完全に機能し、カードがぼやけません...しかし、カードを中心に回転させることはできず、アニメーションには中心から90°の回転が必要です。レイアウトの回転と一緒にカードの高さの半分をアニメーション化するCanvas.Top
ことは、私には非常に見栄えの悪い解決策のように見えます...そして、アニメーションの見た目も非常に悪くなります。解決策を教えてください。
[編集] 私は使用しようとしましたRenderOptions.BitmapScalingMode="NearestNeighbor"
...RenderOptions.EdgeMode="Aliased"
しかし、それはさらに悪化します: