被一个哭笑不得的Bug折腾掉了近1个小时,记录下。
基类:
public partial class MultiDrawFileBaseView : UserControl
{
public DrawMode DrawMode
{
get { return (DrawMode)GetValue(DrawModeProperty); }
set { SetValue(DrawModeProperty, value); }
}
public static readonly DependencyProperty DrawModeProperty =
DependencyProperty.Register("DrawMode", typeof(DrawMode), typeof(MultiDrawImgView),
new PropertyMetadata(DrawMode.Drag, (sender, args) =>
((MultiDrawFileBaseView)sender).OnDrawModeChanged()));
private void OnDrawModeChanged()
{
if (this.DrawMode == DrawMode.Drag)
this.MultiDrawBoard.IsEnabled = false;
else
{
this.MultiDrawBoard.IsEnabled = true;
if (this.DrawMode == DrawMode.Draw)
this.MultiDrawBoard.SetDrawMode();
else if (this.DrawMode == DrawMode.Eraser)
this.MultiDrawBoard.SetEraserMode();
}
}
}
两个派生类:
public class MultiDrawImgView: MultiDrawFileBaseView
{
// 略
}
public class MultiDrawTxtView : MultiDrawFileBaseView
{
// 略
}
在MultiDrawImgView 类中更改DrawMode属性时,PropertyChangedCallBack 属性正常执行,MultiDrawTxtView中怎么都触发不了。 各种检查,最后发现,基类属性定义出了差错。
修改前:
public DrawMode DrawMode
{
get { return (DrawMode)GetValue(DrawModeProperty); }
set { SetValue(DrawModeProperty, value); }
}
public static readonly DependencyProperty DrawModeProperty =
DependencyProperty.Register("DrawMode", typeof(DrawMode), typeof(MultiDrawImgView),
new PropertyMetadata(DrawMode.Drag, (sender, args) =>
((MultiDrawFileBaseView)sender).OnDrawModeChanged()));
修改后:

基类是后写的,没注意检查,造成了只在一个其中派生类正常执行的Bug。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
推荐一个开源项目: 简单的UI框架
https://github.com/DuelWithSelf/WPFEffects
项目会持续不定期更新,部分效果如下:


遇到一个WPF派生类中PropertyChangedCallBack不触发的问题,详细描述了在基类属性定义错误导致的Bug,以及如何通过修正属性定义解决这个问题。同时推荐了一个开源的WPF UI框架。
1241

被折叠的 条评论
为什么被折叠?



