2016-02-15 92 views
4

我试图从另一个控件的下一段代码更改属性Brush,但不知道如何触及此属性。如何更改DrawingGroup.Children标记中笔的笔刷颜色

该图刷被定义为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>... 

我需要到达笔刷属性时的另一控制被聚焦或盘旋。

我不知道这是否可能

+0

你想修改资源'Disp_Origin'(你不能修改它),或者只是改变控件的颜色(设置这个资源)? – bars222

+0

只需修改标记Pen的属性Brush,Disp_Origin内部 – Guille

+0

您可以添加另一个资源'Disp_Origin_with_another_brush',并在控件聚焦或悬停时(例如使用'Trigger')更改整个'DrawingBrush'资源。我认为这是最简单的解决方案。 – bars222

回答

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); 

更新

正如评论所提到的,在需要的时候不集中或覆盖控制,以恢复刷。

+0

所以,这段代码将资源克隆到一个按钮的后台来处理后者,对吧? OnFocus代码可以用在我想要的任何控件中? (当然可以集中) – Guille

+0

是的。您还可以将设置的控制画笔存储在窗口类专用变量中,并且可以随时更新它。 – bars222

+0

看起来这么好,我会延迟这一点的测试,但我想尽快尝试,因为这可以为我节省很多很多时间。 谢谢。 – Guille