我有一个自定义控件,其中包含被重写的 OnRender 方法。我想在任何依赖属性更改事件中使控件无效。当父类型的属性更改时,也希望更新。是否有内置功能可以实现这一点?
编辑:
我发现我可以同时使用“影响渲染”来处理依赖属性,并在 OnLayoutUpdated 上检查其他信息或私有属性。
FrameworkPropertyMetadata.AffectsRender
并且:
private void OnLayoutUpdated(object sender, EventArgs e)
{
int result = (CornerRadius != null ? CornerRadius.GetHashCode() : 0);
result = (result * PrimeHashNumber) ^ (IsSelected.GetHashCode());
result = (result * PrimeHashNumber) ^ (IsReadCornerRadiusFromConfig.GetHashCode());
result = (result * PrimeHashNumber) ^ (IsReadBorderThicknessFromConfig.GetHashCode());
result = (result * PrimeHashNumber) ^ (SelectedColor!=null?SelectedColor.GetHashCode():0);
result = (result * PrimeHashNumber) ^ (Background != null ? Background.GetHashCode() : 0);
result = (result * PrimeHashNumber) ^ (BorderBrush != null ? BorderBrush.GetHashCode() : 0);
if (lastHash != result)
{
this.InvalidateVisual();
lastHash = result;
}
}