0

あるファイルで宣言されてDrawingBrushおり、別のファイルでスタイルが宣言されています。スタイルは、DrawingBrushを背景の塗りつぶしとして使用します。ここで、UserControl XAMLファイルで、バインディングを介してスタイルを参照します。

Style="{DynamicResource myCustomStyle}"

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

DrawingBrush必要な色ごとに複数のesを作成することは避けたいと思います。動的で再利用可能なものにしたいと思います。

4

1 に答える 1

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 は、リソース ディクショナリ内で祖先の検索やデータ バインディングを解決できないと思います。

于 2012-04-10T17:50:45.657 に答える