2014-12-08 4 views
1

일부 객체를 inkcanvas로 드래그 할 수있는 앱을 개발하려고합니다. 이러한 개체는 선택 기능, 위치 변경 기능, 크기 조정 기능 등을 가져야합니다. 아무도이 질문에 나를 도울 수 있습니까? 런타임에 선택한 inkcanvas 하위에 대한 액세스 권한을 얻으려고 어떤 식 으로든 액세스 할 수 있습니까? inkcanvas 어린이는 새 끌기 & 드롭 이벤트가 발생할 때마다 inkcanvas에 추가합니다. (아래 코드를 살펴보십시오.) 나는 inkcanvas의 이벤트를 이미 살펴 봤지만 아무 것도 찾을 수 없었습니다. 도움을 주시면 감사하겠습니다. 감사.Inkcanvas 하위 항목에 액세스하십시오.

private void Canvas1_Drop(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetData(e.Data.GetFormats()[0]) is Image) 
    { 
     Image im = (Image)e.Data.GetData(e.Data.GetFormats()[0]); 
     **Image image1 = new Image(); 
     image1.Source = im.Source; 
     Canvas1.Children.Add(image1);** 
    } 
} 

답변

1

이 모든 작업을 수행 할 수있는 속성은 EditingMode입니다. 다음의 예에

당신은, 캔버스에 추가 캔버스의 모든 항목을 이동 Select 같은 뭔가 편집 모드를 변경하려면 콤보 상자를 사용하여 창에 이미지를 드래그 할 수 있습니다.

XAML :

<Window x:Class="WpfApplication8.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Width="525" 
     Height="350" 
     AllowDrop="True" 
     Drop="MainWindow_OnDrop"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="1*" /> 
     </Grid.RowDefinitions> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="Selection mode" /> 
      <ComboBox Width="75" 
         Margin="2" 
         ItemsSource="{Binding}" 
         SelectionChanged="Selector_OnSelectionChanged" /> 
     </StackPanel> 
     <InkCanvas x:Name="InkCanvas1" 
        Grid.Row="1" 
        MoveEnabled="True" /> 
    </Grid> 
</Window> 

코드 숨김

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 

namespace WpfApplication8 
{ 
    /// <summary> 
    ///  Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      IEnumerable<InkCanvasEditingMode> values = 
       Enum.GetValues(typeof (InkCanvasEditingMode)).Cast<InkCanvasEditingMode>(); 
      DataContext = values; 
     } 

     private void MainWindow_OnDrop(object sender, DragEventArgs e) 
     { 
      object data = e.Data.GetData(DataFormats.FileDrop); 
      if (data != null) 
      { 
       var strings = data as string[]; 
       if (strings != null) 
       { 
        string s = strings[0]; 

        var bitmapImage = new BitmapImage(new Uri(s)); 
        var image = new Image 
        { 
         Stretch = Stretch.None, 
         Source = bitmapImage 
        }; 
        InkCanvas1.Children.Add(image); 
       } 
      } 
     } 


     private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      object addedItem = e.AddedItems[0]; 

      var inkCanvasEditingMode = (InkCanvasEditingMode) addedItem; 
      InkCanvas1.EditingMode = inkCanvasEditingMode; 
     } 
    } 
}