2011-09-26 45 views
0

我在我的用戶控件類OnPropertyChanged方法:用戶控件OnPropertyChanged問題

private static void OnColorChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
     ColorPicker colorPicker = (ColorPicker)sender; 

     Color oldColor = (Color)e.OldValue; 
     Color newColor = (Color)e.NewValue; 
     colorPicker.Red = newColor.R; 
     colorPicker.Green = newColor.G; 
     colorPicker.Blue = newColor.B; 

     colorPicker._previousColors.Push(oldColor); //don't update if undo command executed 
     colorPicker.OnColorChanged(oldColor, newColor); 
    } 

_previousColors是:

private Stack<Color> _previousColors = new Stack<Color>(); 

,我不希望更新該堆棧如果撤銷命令執行:

private void UndoCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = _previousColors.Count > 1; 
    } 

    private void UndoCommand_Executed(object sender, ExecutedRoutedEventArgs e) 
    { 
     var color = _previousColors.Pop(); 
     this.Color = color; 

    } 

如何在OnColorChanged方法中實現此條件?

回答

1

看起來像你可以有私人布爾(讓我們稱之爲撤消)在撤銷執行的開始被設置爲真,並在最後重置爲假。在OnColorChanged中,查看isUndoing的值並採取適當的操作。這不行嗎?

此外,我同意瑞秋,upvoting和Answer標記是你的朋友。每當你給一個好的帖子的人信貸,人們更有可能在未來幫助你,

+0

年,謝謝你。 – Alex