获得墨画布子级的访问权
本文关键字:访问权 | 更新日期: 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;
}
}
}