2012-10-10 28 views
10

Gần đây tôi đã tình cờ gặp vấn đề sau. Trong ứng dụng WPF của tôi, tôi đã triển khai thiết kế nhỏ, nơi bạn có thể đặt các phần tử trên canvas, di chuyển, chia tỷ lệ và xoay chúng. Trong khi tìm kiếm trên web, tôi tìm thấy giải pháp sau cho vấn đề này http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1. Giải pháp này thực hiện di chuyển, mở rộng quy mô và xoay quanh lớp System.Windows.Controls.Primitives.Thumb vì vậy tôi nghĩ rằng tôi sẽ điều chỉnh giải pháp này cho ứng dụng của mình và tiếp tục. Vấn đề là, trong khi trên máy của tôi tất cả mọi thứ là tốt, trên những người khác có một số vấn đề rendering. Tôi đã thực hiện một ảnh chụp màn hình về những gì tôi đang nói:ContentControl Rotate decorator rendering

screenshot

Tôi đang sử dụng Windows 7 mặc dù tôi chạy ứng dụng của tôi trên Window khác 7 và nó cũng được trả lại sai. Tôi chạy ứng dụng của tôi với cửa sổ xp và các thiết lập tương thích khác trên máy tính của tôi nhưng tôi không thể tái tạo lỗi này. Điều này là gì và những gì tôi có thể làm sai?

Đây là tập tin XAML của tôi, tôi đang sử dụng để kiểm soát nội dung phong

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

Một này là tập tin RotateDecorator.xaml điều đó xảy ra gây ra vấn đề:

<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

Xin chào @ krajew4, bạn nên đưa mã của mình vào câu hỏi. – Surfbutler

+0

Mẫu mã mẫu có chạy đúng trên tất cả các máy của bạn không? – Surfbutler

Trả lời

0

Điều đầu tiên tôi nghĩ đến bất cứ khi nào nhìn thấy một cái gì đó như thế này là card đồ họa. Bạn có thể nhận được một số hành vi lạ với một số cạc đồ họa, đặc biệt nếu trình điều khiển của chúng không được cài đặt đúng cách/cập nhật.

0

Điều này là do MergedDictionaries. Dự án thiết kế sơ đồ chia tách các hành động Di chuyển, Thay đổi kích cỡ và Xoay thành 3 từ điển riêng biệt. Từ ảnh chụp màn hình, bạn có thể thấy ngón tay cái thay đổi kích cỡ được tải. Trong trường hợp của tôi, hành động di chuyển cũng hoạt động, nhưng giống như câu hỏi, các ngón tay cái xoay không được hiển thị. Không có lỗi nào được ném ra, nhưng việc kiểm tra bằng Snoop cho thấy rằng nó không thể tìm thấy từ điển xoay.

giải pháp này mở rộng về những gì tôi đã đề cập ở trên: https://stackoverflow.com/a/17083360/978622

Để giải quyết vấn: Kết hợp các từ điển tài nguyên vào một từ điển tài nguyên duy nhất.