代码之家  ›  专栏  ›  技术社区  ›  serhio

WPF和AutoRedraw

  •  0
  • serhio  · 技术社区  · 15 年前

    我有一个自定义的WPF行及其样式。用户控件资源:

        <!-- Framework properties to update -->
        <SolidColorBrush x:Key="MyLineBrush" Color="LightGreen" />
        <sys:Double x:Key="MyLineStrokeThickness">1</sys:Double>
    
        <!-- Custom property to update -->
        <sys:Boolean x:Key="MyLineIsArrowUsed">false</sys:Boolean>
    
    
        <Style TargetType="local:MyLine" x:Key="MyLineStyleKey">
    
            <!-- AutoUpdates the control -->
            <Setter Property="Fill" 
                    Value="{DynamicResource MyLineBrush}"/>
            <Setter Property="StrokeThickness" 
                    Value="{DynamicResource MyLineStrokeThickness}" />
    
            <!-- does NOT AutoUpdate the control -->
            <Setter Property="ShowText" 
                    Value="{DynamicResource MyLineIsArrowUsed}"/>
    

    现在,当我更新 MyLineStrokeThickness 控件立即更新。 但当我更新自定义依赖项属性时 MyLineIsArrowUsed 没有变化。

    更新自定义依赖项属性后,应使用什么来更新自定义控件(行)图形?

    我试过:

    static void OnIsArrowUsedChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
        var s = (MyLine)source;
        s.UpdateLayout();            
    }
    

    但这不管用。

    只有当我移动控件或在强制重新绘制控件本身时执行其他操作时,该控件才会更新。

    1 回复  |  直到 15 年前
        1
  •  2
  •   NVM    15 年前

    在依赖项属性声明中,添加FrameworkPropertyMetadata.AffectsMeasure

    http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadata.affectsmeasure.aspx