【问题标题】:Get acces to an Inkcanvas child访问 Inkcanvas 子项
【发布时间】:2014-12-08 12:00:40
【问题描述】:

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

【问题讨论】:

    标签: c# wpf inkcanvas


    【解决方案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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2014-11-18
      相关资源
      最近更新 更多