2012-10-10 57 views
10

Recientemente me encontré con el siguiente problema. En mi aplicación WPF implementé un pequeño diseñador, donde puedes poner elementos en el lienzo, moverlos, escalarlos y rotarlos. Mientras buscaba en la web encontré la siguiente solución a este problema http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1. Esta solución implementa mover, escalar y rotar por la clase System.Windows.Controls.Primitives.Thumb así que pensé que simplemente ajustaría esta solución a mi aplicación y seguiría adelante. El problema es que, mientras que en mi máquina todo está bien, en los demás hay algunos problemas de renderizado. He hecho una captura de pantalla de lo que estoy diciendo:ContentControl Gire la representación del decorador

screenshot

estoy usando Windows 7, aunque tengo mi aplicación en la otra ventana 7 y también se hace mal. Ejecuto mi aplicación con Windows XP y otras configuraciones de compatibilidad en mi máquina, pero no pude reproducir este error. ¿De qué se trata y qué puedo hacer mal?

Este es mi archivo XAML que estoy usando para el control del contenido de peinar

<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 este archivo es RotateDecorator.xaml que le sucede a causar problemas:

<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> 
+0

Hi @ krajew4, debe incluir su código en su pregunta. – Surfbutler

+0

¿La muestra del proyecto de código se ejecuta correctamente en todas sus máquinas? – Surfbutler

Respuesta

0

Lo primero que pienso cada vez que se ve algo como esto son las tarjetas gráficas. Puede obtener comportamientos extraños con ciertas tarjetas gráficas, especialmente si sus controladores no están instalados correctamente/actualizados.

0

Esto es causado por MergedDictionaries. Diagram Designer Project divide las acciones Mover, Redimensionar y Girar en 3 diccionarios separados. De la captura de pantalla puede ver que se carga el pulgar de cambio de tamaño. En mi caso, la acción de mover también funcionó, pero al igual que la pregunta, los pulgares de rotación no se mostraron. No se lanzaron errores, pero el examen con Snoop muestra que no fue capaz de encontrar el diccionario de rotación.

Esta solución se expande en lo que he tratado anteriormente: https://stackoverflow.com/a/17083360/978622

resolver: combinar los diccionarios de recursos en un único diccionario de recursos.

Cuestiones relacionadas