2016-02-15 133 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