2012-04-10 7 views
0

私はDrawingBrushを1つのファイルで宣言し、スタイルを別のファイルで宣言しました。スタイルは、背景塗りつぶしとしてDrawingBrushを使用します。今、UserControl XAMLファイルで、私はバインディングを介してスタイルを参照します。トリガーを使用して別のファイルで参照されるWPFスタイル内のプロパティを変更するにはどうすればよいですか?

Style="{DynamicResource myCustomStyle}" 

ここではトリッキーな部分があります。 DataTriggerを使用して、DrawingBrush内のパスの塗りつぶし色を変更したいとします。さて、スタイルは1つのファイルに存在し、DrawingBrushは別のファイルに存在するので、これをどのように達成するのですか?

必要な色ごとに複数のDrawingBrushを作成しないようにしたいと考えています。私はそれが動的で再利用可能であることを望みます。

答えて

0

これはできないようです。私はDrawingBrushをResourceDictionaryに移動させて実験しましたが、これが終了するとデータバインディングによってエラーがスローされます。次のXAMLを取得する場合

<Rectangle x:Name="IconBrush" local:Helper.Colour="Black"> 
    <Rectangle.Fill> 
     <DrawingBrush Stretch="Uniform"> 
      <DrawingBrush.Drawing> 
       <DrawingGroup> 
        <DrawingGroup.Children> 
         <GeometryDrawing Geometry="M1,1 L9.5,1 L9.5,13 L1,13 z M10.5,10.4 L13.15,13 M11.6,7.675 C11.6,9.5113467 10.066575,11 8.175,11 C6.2834248,11 4.75,9.5113467 4.75,7.675 C4.75,5.8386532 6.2834248,4.35 8.175,4.35 C10.066575,4.35 11.6,5.8386532 11.6,7.675 z"> 
          <GeometryDrawing.Pen> 
           <Pen Thickness="1" 
            Brush="{Binding Path=(local:Helper.Colour), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Rectangle}}}" /> 
          </GeometryDrawing.Pen> 
         </GeometryDrawing> 
        </DrawingGroup.Children> 
       </DrawingGroup> 
      </DrawingBrush.Drawing> 
     </DrawingBrush> 
    </Rectangle.Fill> 
</Rectangle> 

次に、これを代わりに変更して、動作を停止します。なぜ再利用可能なリソースを利用するためにこれを行うことができないのか分かりません。

<Rectangle x:Name="IconBrush" pm4uc:Helper.Colour="Black" 
      Fill="{DynamicResource NewIconBrush}" /> 

WPFは、リソース辞書内の祖先またはデータバインディングを見つけることができないと思います。

関連する問題