2013-01-31 104 views
0

在資源字典我已經存儲了一個視框用帆布WPF改變填充顏色刷

<Style x:Key="MyPathStyle" TargetType="Path"> 
    <Setter Property="Fill" Value="{Binding BackgroundColorBrush, 
     RelativeSource={RelativeSource AncestorType=iconcontrols:IconAsVisualBrush}}"/> 
</Style> 
<Viewbox x:Key="Icon2"> 
     <Canvas Width="40.000" Height="40.000"> 
      <Canvas> 
       <Path Fill="#ff99baf4" Data="F1 M 14.377,23.798" /> 
       <Path Style="{StaticResource MyPathStyle}" Data="..." /> 
      </Canvas> 
     </Canvas> 
</Viewbox> 

所以我想改變使用我的控制集裝箱的BackgroundColorBrush(稱爲IconAsVisualBrush)第二條路徑的顏色。 這是

<Grid x:Name="GridIconBrush" Width="40" Height="40"> 
     <Grid.Background> 
      <VisualBrush x:Name="CtrlVisualBrush" Stretch="Uniform" /> 
     </Grid.Background> 
</Grid> 

的VisualBrush在CS設置:

private static void OnIconBrushResourceChanged(DependencyObject source 
      , DependencyPropertyChangedEventArgs e) 
     { 
IconAsVisualBrush control = source as IconAsVisualBrush; 
control.CtrlVisualBrush.Visual = (Viewbox)Application.Current.FindResource(e.NewValue); 
     } 

在我的用戶,我可以用folliwing XAML繪製視框:

<iconcontrols:IconAsVisualBrush BackgroundColorBrush="White" 
           IconBrushResource="Icon2"/> 
<iconcontrols:IconAsVisualBrush BackgroundColorBrush="Red" 
           IconBrushResource="Icon2"/> 

畫布繪製正確,但不是顏色。我收到: 找不到與參考'RelativeSource FindAncestor,AncestorType ='IconAsVisualBrush',AncestorLevel ='1'綁定的源代碼。 BindingExpression:路徑= BackgroundColorBrush;的DataItem = NULL;目標元素是'路徑'(Name ='');目標屬性是'填充'(類型'刷')

有沒有一種方法來更改所有者控件中的路徑填充顏色集(而不是使所有IconAsVisualBrush具有相同顏色的動態資源)可以用不同的填充顏色繪製相同的形狀?

回答

0

你的問題是你的風格的Setter無法找到IconAsVisualBrush,大概是因爲它不是Path的可視化樹的一部分。你有沒有考慮過使用觸發器?在不知道應用程序體系結構和調用OnIconBrushResourceChanged的情況下很難提出解決方案 - 但是因爲我們正在討論WPF,所以我會猜測您使用的是MVVM。如果是這樣,你可以使用DataTriggers像這樣:

<Style x:Key="MyPathStyle" TargetType="Path"> 
    <Setter Property="Fill" Value="White" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{MyColourChangedProperty}" 
        Value="True"> 
      <DataTrigger.Setters> 
       <Setter Property="Fill" Value="Red"/> 
      </DataTrigger.Setters> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

編輯:爲了澄清,我在這裏建議的風格會給你的白色默認填充,但是如果你設置「MyColourChangedProperty」(或任何你綁定to)爲true,它會變成紅色。

+0

我試過數據觸發器,但它不起作用,總是默認的顏色是白色的。該'OnIconBrushResourceChanged'從'dependecy屬性來 公共靜態只讀的DependencyProperty IconBrushResourceProperty = DependencyProperty.Register( 「IconBrushResource」 的typeof(串)的typeof(IconAsVisualBrush) ,新PropertyMetadata(的String.Empty,OnIconBrushResourceChanged));'新的筆刷在xaml代碼中設置。在運行時,調用OnIconBrushResourceChanged並設置VisualBrush。可能在這裏是錯過了「重新綁定」或「刷新綁定」。 –

+0

你爲什麼用字符串來表示筆刷?你能告訴我你用於數據觸發器的代碼嗎? –