找回密码
 立即注册

QQ登录

只需一步,快速开始

shengairong

银牌会员

2

主题

4

帖子

2039

积分

银牌会员

积分
2039
  • 2035

    金币

  • 主题

  • 帖子

最新发帖
shengairong
银牌会员   /  发表于:2015-4-10 13:24  /   查看:5229  /  回复:1
我试用了一下Spread Designer,里面有支持Redo、Undo,但是只是针对cell内容,对于格式和样式上并没有支持Redo、Undo。这点跟Excel不一样。
请问Redo、undo有支持格式样式的么?

1 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-4-10 16:13:00
沙发
回复 1楼shengairong的帖子

可以通过集成 ActionBase 和实现 IUndo 来自定义 Undo/Redo , 请参考以下代码:

  1. namespace SetForeColorUndoAction
  2. {
  3.     /// <summary>
  4.     /// Interaction logic for MainWindow.xaml
  5.     /// </summary>
  6.     public partial class MainWindow : Window
  7.     {
  8.         public MainWindow()
  9.         {
  10.             InitializeComponent();

  11.             string[,] values = { {"aa", "bb"}, {"cc", "dd"}};
  12.             this.spread1.ActiveSheet.SetArray(0,0, values);
  13.         }

  14.         private void Button_Click(object sender, RoutedEventArgs e)
  15.         {
  16.             SetCellForeColorUndoAction action = new SetCellForeColorUndoAction(this.spread1.ActiveSheet, new CellRange(0, 0, 2, 2), Colors.Red);
  17.             this.spread1.UndoManager.Do(action);
  18.         }
  19.     }

  20.     internal class SetCellForeColorUndoAction : ActionBase, IUndo
  21.     {
  22.         private Worksheet _workSheet = null;
  23.         private CellRange _cellRange = null;
  24.         private Color? _foreColor = null;
  25.         private List<CellData> _cachedForeground = new List<CellData>();

  26.         public SetCellForeColorUndoAction(Worksheet workSheet, CellRange cellRange, Color foreColor)
  27.         {
  28.             _workSheet = workSheet;
  29.             _cellRange = cellRange;
  30.             _foreColor = foreColor;
  31.         }

  32.         public override void Execute(object parameter)
  33.         {
  34.             if (this.CanExecute(parameter))
  35.             {
  36.                 SheetView sheetView = parameter as SheetView;
  37.                 try
  38.                 {
  39.                     this.SaveState();

  40.                     for (int row = _cellRange.Row; row < _cellRange.Row + _cellRange.RowCount; row++)
  41.                     {
  42.                         for (int column = _cellRange.Column; column < _cellRange.Column + _cellRange.ColumnCount; column++)
  43.                         {
  44.                             _workSheet.Cells[row, column].Foreground = new SolidColorBrush(_foreColor.Value);
  45.                         }
  46.                     }

  47.                 }
  48.                 catch (Exception ex)
  49.                 {
  50.                 }
  51.                 finally
  52.                 {
  53.                     this.ResumeInvalidate(sheetView);
  54.                 }

  55.             }
  56.         }

  57.         public override bool CanExecute(object parameter)
  58.         {
  59.             return true;
  60.         }

  61.         public bool CanUndo
  62.         {
  63.             get
  64.             {
  65.                 return true;
  66.             }
  67.         }

  68.         public void SaveState()
  69.         {
  70.             for (int row = _cellRange.Row; row < _cellRange.Row + _cellRange.RowCount; row++)
  71.             {
  72.                 for (int column = _cellRange.Column; column < _cellRange.Column + _cellRange.ColumnCount; column++)
  73.                 {
  74.                     _cachedForeground.Add(new CellData(row, column, _workSheet.Cells[row, column].Foreground));
  75.                 }
  76.             }
  77.         }

  78.         public bool Undo(object parameter)
  79.         {
  80.             SheetView sheetView = parameter as SheetView;
  81.             bool result;
  82.             try
  83.             {
  84.                 result = this.Undo(sheetView);
  85.             }
  86.             finally
  87.             {
  88.             }
  89.             return result;
  90.         }

  91.         private bool Undo(SheetView sheetView)
  92.         {
  93.             foreach (var item in _cachedForeground)
  94.             {
  95.                 _workSheet.Cells[item.Row, item.Column].Foreground = item.Value as Brush;
  96.             }
  97.             return true;
  98.         }

  99.         public override string ToString()
  100.         {
  101.             return "Undo Set ForeColor";
  102.         }
  103.     }

  104.     internal struct CellData
  105.     {
  106.         private int row;
  107.         private int column;
  108.         private object value;

  109.         public CellData(int row, int column, object value)
  110.         {
  111.             this.row = row;
  112.             this.column = column;
  113.             this.value = value;
  114.         }

  115.         public int Row
  116.         {
  117.             get { return row; }
  118.         }

  119.         public int Column
  120.         {
  121.             get { return column; }
  122.         }

  123.         public object Value
  124.         {
  125.             get { return this.value; }
  126.         }
  127.     }
  128. }

复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部