获得墨画布子级的访问权

本文关键字:访问权 | 更新日期: 2023-09-27 18:33:42

我正在尝试开发一个能够将一些对象拖到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);**
    } 
}

获得墨画布子级的访问权

有 EditMode 属性用于执行所有这些操作。

在以下示例中,您可以将图像拖动到窗口以将其添加到画布中,然后使用 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;
        }
    }
}