如何从 DrawingGroup.Children 标记中的笔更改画笔颜色
Posted
技术标签:
【中文标题】如何从 DrawingGroup.Children 标记中的笔更改画笔颜色【英文标题】:How to change the Brush color from a Pen in a DrawingGroup.Children tag 【发布时间】:2016-02-15 12:14:04 【问题描述】:我正在尝试从另一个控件的下一段代码中更改属性 Brush,但不知道如何访问该属性。
此绘图笔刷被定义为 Application.Resource 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>...
当另一个控件获得焦点或悬停时,我需要访问笔刷属性。
我不知道这是否可行
【问题讨论】:
是要修改资源Disp_Origin
(不能修改),还是只改变控件的颜色(设置了这个资源)?
只修改标签Pen的属性Brush,在Disp_Origin里面
您可以添加另一个资源Disp_Origin_with_another_brush
,并在控件获得焦点或悬停时更改整个DrawingBrush
资源(例如使用Trigger
)。我认为这是最简单的解决方案。
诀窍在于 DrawingBrush 中有各种 GeometryDrawing 标签,我想根据交互的控件更改一个或另一个。这是示例图片link 当鼠标移过不同的单选按钮时,链接的 GeometryDrawing 必须改变颜色。
有 15 种变体,重复 15 次相同的资源,只是修改一种颜色,我认为这不是明智的做法。
【参考方案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 );
更新
在cmets中提到,当控件没有被聚焦或被覆盖时需要恢复刷子。
【讨论】:
那么,这段代码,将资源克隆到一个按钮的背景中来处理后者,对吧? OnFocus 代码可以用于我想要的任何控件吗? (当然也可以集中注意力) 是的。您还可以将设置的控件画笔存储在窗口类私有变量中,并可以随时更新。 看起来太好了,我打算稍微推迟一下这个测试,但我想尽快尝试,因为这可以为我节省很多时间。谢谢。 提供的解决方案需要进行一些调整,因为如果代码设置在 On Hover 方法中,修改的颜色永远不会恢复到原来的颜色。需要另一种方法来恢复原来的DrawingBrush。 这是我正在使用的额外方法。 private void RestoreBrush(object sender, RoutedEventArgs e) DrawingBrush Disp_Origin_Brush = (Application.Current.Resources["Disp_Origin"] as DrawingBrush).Clone(); Disp_Origin.Fill = Disp_Origin_Brush;以上是关于如何从 DrawingGroup.Children 标记中的笔更改画笔颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何从外部从 GitHub 加载 JavaScript 文件? [复制]