访问Inkcanvas孩子

时间:2014-12-08 12:00:41

标签: c# wpf 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 个答案:

答案 0 :(得分:1)

这一切都有EditingMode属性。

在下面的示例中,您可以将图像拖到窗口中以将其添加到画布,然后使用ComboBox将编辑模式更改为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;
        }
    }
}