我正在使用InkCanvas创建类似于绘画的应用程序,我想在我的应用程序中实现撤销和重做功能。
最好的实现方法是什么?如何为InkCanvas实现撤销/重做功能?
我正在使用InkCanvas创建类似于绘画的应用程序,我想在我的应用程序中实现撤销和重做功能。
最好的实现方法是什么?如何为InkCanvas实现撤销/重做功能?
我知道现在可能有些晚了,但是如果有人只关注InkCanvas,那么这个答案可能会有所帮助:
public partial class MainWindow : Window
{
System.Windows.Ink.StrokeCollection _added;
System.Windows.Ink.StrokeCollection _removed;
private bool handle = true;
public MainWindow()
{
InitializeComponent();
inkCanvas1.Strokes.StrokesChanged += Strokes_StrokesChanged;
}
private void Strokes_StrokesChanged(object sender, System.Windows.Ink.StrokeCollectionChangedEventArgs e)
{
if(handle)
{
_added = e.Added;
_removed = e.Removed;
}
}
private void Undo(object sender, RoutedEventArgs e)
{
handle = false;
inkCanvas1.Strokes.Remove(_added);
inkCanvas1.Strokes.Add(_removed);
handle = true;
}
private void Redo(object sender, RoutedEventArgs e)
{
handle = false;
inkCanvas1.Strokes.Add(_added);
inkCanvas1.Strokes.Remove(_removed);
handle = true;
}
}
在XAML中:
<InkCanvas x:Name="inkCanvas1" Width="100" Height="100" Background="Yellow"/>
<Button Content="Undo" Click="Undo" />
<Button Content="Redo" Click="Redo"/>
我不知道这是否有帮助.. 但是一个非常简单的撤销方法是:UNDO
YourWindow.xaml.cs
private void Undo_Click(object sender, RoutedEventArgs e)
{
if (YourInkCanva.Strokes.Count > 0)
{
YourInkCanva.Strokes.RemoveAt(YourInkCanva.Strokes.Count - 1);
}
else
{
// Else Do Nothing.
}
}
YourInkCanva
替换为您的inkcanva名称。