Wpf 如何更改DrawingGroup.Children标记中笔的画笔颜色

Wpf 如何更改DrawingGroup.Children标记中笔的画笔颜色,wpf,visual-studio-2015,blend,Wpf,Visual Studio 2015,Blend,我试图从另一个控件的下一段代码中更改属性笔刷,但不知道如何访问此属性 此绘图画笔定义为应用程序。资源en App.XAML <DrawingBrush x:Key="Disp_Origin" Stretch="Uniform"> <DrawingBrush.Drawing> <DrawingGroup> <DrawingGroup.Children>

我试图从另一个控件的下一段代码中更改属性笔刷,但不知道如何访问此属性

此绘图画笔定义为应用程序。资源en 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>...

...
当另一个控件聚焦或悬停时,我需要访问pen brush属性


我不知道这是否可能

实际上我已经找到了如何做到这一点。但它需要代码隐藏。最重要的是
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 );
更新


正如在注释中提到的,当控件未被聚焦或覆盖时,需要恢复笔刷

您想修改资源
Disp_Origin
(您不能修改它),还是只更改控件的颜色(设置此资源)?只需修改标记笔的属性画笔,在Disp_Origin内部您可以使用另一个画笔添加另一个资源
Disp_Origin
,并在控件聚焦或悬停时更改整个
DrawingBrush
resource(例如使用
Trigger
)。我认为这是最简单的解决方案。诀窍在于DrawingBrush中有各种GeometryDrawing标记,我希望根据我正在交互的控件来更改其中一个。这是一张图片,当鼠标移动到不同的单选按钮上时,链接的几何图形必须改变颜色。有15种变化,重复15次相同的资源,只修改一种颜色,我认为这不是明智的做法。因此,这段代码,将资源克隆到按钮的背景中,以处理后者,对吗?OnFocus代码可以在我想要的任何控件中使用?(当然也可能是重点)是的。您还可以将设置好的控件笔刷存储在窗口类私有变量中,并可以随时更新它。看起来非常好,我将稍微推迟测试,但我想尽快尝试,因为这可以节省我很多时间。谢谢。提供的解决方案需要一些调整,因为如果代码是在悬停方法中设置的,修改后的颜色永远不会恢复到原始颜色。需要另一种方法来恢复原始的DrawingBrush。这是我正在使用的额外方法。私有void RestoreBrush(对象发送方,RoutedEventTarget e){DrawingBrush Disp_Origin_Brush=(Application.Current.Resources[“Disp_Origin”]作为DrawingBrush.Clone();Disp_Origin.Fill=Disp_Origin_Brush;}