【发布时间】:2013-03-19 03:00:54
【问题描述】:
我有自定义控件,重写了 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;
}
}
【问题讨论】:
-
我不会为此使用 LayoutUpdated,因为它比您预期的更频繁地触发。它被如此频繁地调用,以至于它“感觉”到了正确的位置,但是在使用它时您可能会遇到一些性能问题。
-
@dowhilefor 计算哈希的原因。我没有看到其他方式,因为我需要跟踪不同的内部属性。
标签: .net wpf controls dependency-properties