2012-10-10 16 views
10

Niedawno natknąłem się na następujący problem. W mojej aplikacji WPF zaimplementowałem małego projektanta, w którym można umieszczać elementy na płótnie, przesuwać je, skalować i obracać. Podczas przeszukiwania sieci znalazłem następujące rozwiązanie tego problemu: http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1. To rozwiązanie implementuje przenoszenie, skalowanie i obracanie przez System.Windows.Controls.Primitives.Thumb class, więc pomyślałem, że po prostu dostosuję to rozwiązanie do mojej aplikacji i ruszy dalej. Problem polega na tym, że na moim komputerze wszystko jest w porządku, a na innych są problemy z renderowaniem. Zrobiłem zrzut ekranu, co mówię:ContentControl Rotate rendering dekoratora

screenshot

używam Windows 7, mimo że prowadzę aplikację na drugim Windows 7 i jest również świadczone źle. Uruchomiłem swoją aplikację z Window Xp i innymi ustawieniami zgodności na moim komputerze, ale nie udało mi się odtworzyć tego błędu. O co chodzi i co mogę zrobić źle?

To jest mój plik XAML używam do kontroli zawartości stylizacji

<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 to RotateDecorator.xaml plik, który dzieje się powodować problemy:

<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, powinieneś dołączyć swój kod do swojego pytania. – Surfbutler

+0

Czy próbka kodu źródłowego działa poprawnie na wszystkich twoich maszynach? – Surfbutler

Odpowiedz

0

Pierwszą rzeczą myślę za każdym razem, gdy widzę coś takiego, to karty graficzne. Możesz uzyskać dziwne zachowanie w przypadku niektórych kart graficznych, zwłaszcza jeśli ich sterowniki nie są poprawnie zainstalowane/zaktualizowane.

0

Jest to spowodowane połączonymi słowami słownikowymi. Projekt Diagram Designer dzieli działania Move, Resize i Rotate na 3 osobne słowniki. Z ekranu widać ładowany kciuk zmiany rozmiaru. W moim przypadku akcja ruchu również zadziałała, ale podobnie jak pytanie, kciuki obrotowe nie były wyświetlane. Żadne błędy nie zostały rzucone, ale badanie za pomocą Snoopa pokazuje, że nie było w stanie znaleźć słownika rotacyjnego.

Rozwiązanie to rozszerza się na to, co omówiliśmy powyżej: https://stackoverflow.com/a/17083360/978622

Aby rozwiązać: Połącz słowniki zasobów do słownika pojedynczego zasobu.