如何在DrawingGroup.Children标记中更改笔的笔刷颜色

时间:2016-02-15 12:14:05

标签: wpf visual-studio-2015 blend

我试图从另一个控件的下一段代码中更改属性Brush,但不知道如何到达此属性。

此绘图笔刷定义为Application.Resource和App.XAML

<DrawingBrush x:Key="Disp_Origin" Stretch="Uniform">
        <DrawingBrush.Drawing>
            <DrawingGroup>
                <DrawingGroup.Children>
                    <GeometryDrawing Geometry="F1 M 720.099,497.862C 778.822,493.976 837.662,492.02 896.514,492.02">
                        <GeometryDrawing.Pen>
                            <Pen Thickness="1.33333" MiterLimit="2.75" Brush="#FFA5AEB7"/>
                        </GeometryDrawing.Pen>
                    </GeometryDrawing>...

当另一个控件聚焦或悬停时,我需要达到笔刷属性。

我不知道这是否可能

1 个答案:

答案 0 :(得分:1)

实际上我已经找到了如何做到这一点。但它需要背后的代码。最重要的是它允许更改控件资源的Clone()方法,您应该从后面的代码设置此画笔资源。不幸的是,代码的可读性不高。

// Initializing code
// And as mentioned in comments code for restore color
DrawingBrush myBrush = ( Application.Current.Resources["Disp_Origin"] as DrawingBrush ).Clone();
testButton.Background = myBrush;

// On hover or on focus code
DrawingBrush settedBrush = testButton.Background as DrawingBrush;
( ( System.Windows.Media.GeometryDrawing )( ( ( System.Windows.Media.DrawingGroup )
   ( settedBrush.Drawing ) ).Children[0] ) ).Pen.Brush = new SolidColorBrush( Colors.Red );

<强>更新

如评论中所述,当控件未聚焦或覆盖时,需要恢复画笔。