如何使依赖属性更改时的视觉效果无效?

Iev*_*ida 3 .net wpf controls dependency-properties

我有带有重写OnRender方法的自定义控件。我想使对任何依赖属性更改事件的控制无效。当父类型的属性发生更改时也可以进行更新。有什么办法可以使用内置功能来做到这一点吗?

编辑:

我发现我可以对依赖属性使用“影响渲染”,并检查 OnLayoutUpdated 以获取附加信息或私有属性(如果有)。

FrameworkPropertyMetadata.AffectsRender
Run Code Online (Sandbox Code Playgroud)

和:

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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ser 5

恕我直言,最好的方法是指定您使用的 DependencyProperties,它们会影响渲染。

请参阅 FrameworkPropertyMetadata.AffectsRender:http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadata.aspx