Подтвердить что ты не робот

ContentControl Поверните рендеринг декоратора

Я недавно наткнулся на следующую проблему. В моем приложении WPF я реализовал небольшой дизайнер, где вы можете размещать элементы на холсте, перемещать, масштабировать и поворачивать их. При поиске в Интернете я нашел следующее решение этой проблемы http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1. Это решение реализует перемещение, масштабирование и поворот по классу System.Windows.Controls.Primitives.Thumb, поэтому я решил, что просто отрегулирую это решение для своего приложения и перейду дальше. Проблема в том, что на моей машине все нормально, а на других возникают проблемы с рендерингом. Я сделал снимок экрана о том, что я говорю:

скриншот

Я использую Windows 7, хотя я запускаю свое приложение в другом окне 7, и оно также отображается неправильно. Я запускаю свое приложение с помощью окна 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>

A это файл 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>
4b9b3361

Ответ 1

Первое, что я думаю о том, когда видят что-то подобное, - это графические карты. Вы можете получить некоторые странные поведения с определенными видеокартами, особенно если их драйверы не установлены должным образом/обновлены.

Ответ 2

Это вызвано MergedDictionaries. Проект Designer Diagram разбивает действия Move, Resize и Rotate на 3 отдельных словаря. На скриншоте вы можете увидеть, как большой размер палитры загружен. В моем случае действие перемещения также работало, но, как и вопрос, вращающиеся большие пальцы не отображались. Ошибок не было, но проверка со Snoop показывает, что он не смог найти словарь поворота.

Это решение расширяется по тому, что я рассмотрел выше: fooobar.com/info/261692/...

Решить: объединить словари ресурсов в один ресурсный словарь.