19

私は最近、次の問題に出くわしました: 私の WPF アプリケーションでは、要素をキャンバスに配置し、移動、拡大縮小、回転できる小さなデザイナーを実装しました。

ウェブを検索しているときに、この問題の次の解決策を見つけました。このソリューションは、クラスごとに移動、スケーリング、回転を実装してSystem.Windows.Controls.Primitives.Thumbいるため、このソリューションを自分のアプリに合わせて調整して先に進むことにしました。問題は、私のマシンではすべて問題ありませんが、他のマシンではレンダリングの問題がいくつかあることです。私が言っていることのスクリーンショットを作成しました:

スクリーンショット

アプリを他の Windows 7 で実行しているにもかかわらず、Windows 7 を使用していますが、レンダリングも間違っています。マシンで Windows XP およびその他の互換性設定を使用してアプリを実行しましたが、このバグを再現できませんでした。これは何についてであり、私は何が間違っているのでしょうか?

これは、コンテンツ コントロールのスタイリングに使用している xaml ファイルです。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="clr-namespace:COMPANY.WPUI.LayoutDesignModel.Thumbs">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="MoveThumb.xaml"/>
        <ResourceDictionary Source="ResizeDecorator.xaml"/>
        <ResourceDictionary Source="RotateDecorator.xaml"/>
    </ResourceDictionary.MergedDictionaries>

    <Style x:Key="DesignerItemStyle" TargetType="ContentControl">
        <Setter Property="MinHeight" Value="50"/>
        <Setter Property="MinWidth" Value="50"/>
        <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ContentControl">
                    <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
                        <Control Name="RotateDecorator" Template="{StaticResource RotateDecoratorTemplate}" Visibility="Collapsed"/>
                        <s:MoveThumb Template="{StaticResource MoveThumbTemplate}" Cursor="SizeAll"/>
                        <Control x:Name="ResizeDecorator" Template="{StaticResource ResizeDecoratorTemplate}" Visibility="Collapsed"/>
                        <ContentPresenter Content="{TemplateBinding ContentControl.Content}"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="Selector.IsSelected" Value="True">
                            <Setter TargetName="ResizeDecorator" Property="Visibility" Value="Visible"/>
                            <Setter TargetName="RotateDecorator" Property="Visibility" Value="Visible"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

これは RotateDecorator.xaml ファイルであり、たまたま問題を引き起こします。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="clr-namespace:COMPANY.WPUI.LayoutDesignModel.Thumbs">

    <Style TargetType="{x:Type s:RotateThumb}">
        <Setter Property="Cursor" Value="Hand"/>
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type s:RotateThumb}">
                    <Grid Width="30" Height="30">
                        <Ellipse Width="30" Height="30" Fill="#B0B0BB" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <ControlTemplate x:Key="RotateDecoratorTemplate" TargetType="{x:Type Control}">
        <Grid>
            <s:RotateThumb Margin="-18,-18,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
            <s:RotateThumb Margin="0,-18,-18,0" VerticalAlignment="Top" HorizontalAlignment="Right" />
            <s:RotateThumb Margin="0,0,-18,-18" VerticalAlignment="Bottom" HorizontalAlignment="Right" />
            <s:RotateThumb Margin="-18,0,0,-18" VerticalAlignment="Bottom" HorizontalAlignment="Left" />
        </Grid>
    </ControlTemplate>
</ResourceDictionary>
4

2 に答える 2

0

これは MergedDictionaries が原因です。ダイアグラム デザイナー プロジェクトは、移動、サイズ変更、および回転アクションを 3 つの個別の辞書に分割します。スクリーンショットから、サイズ変更サムがロードされていることがわかります。私の場合、移動アクションも機能しましたが、質問のように回転サムが表示されませんでした。エラーはスローされませんでしたが、Snoop で調べると、ローテーション ディクショナリが見つからないことがわかりました。

このソリューションは、上記で説明した内容を拡張したものです: https://stackoverflow.com/a/17083360/978622

解決方法: リソース ディクショナリを 1 つのリソース ディクショナリに結合します。

于 2015-06-30T17:13:38.487 に答える
0

このようなものを見るたびに最初に考えるのは、グラフィックカードです。特定のグラフィックス カードで奇妙な動作が発生することがあります。特に、ドライバが適切にインストールされていないか最新ではない場合に顕著です。

于 2015-06-22T15:36:38.430 に答える