0

VisualBrushこのコードを使用して、ボタンに素敵な画像をレンダリングするのはなぜですか:

<Button>
    <Rectangle Width="28" Height="28">
        <Rectangle.Fill>
            <VisualBrush Stretch="Fill" Visual="{StaticResource lovely_image}" />
        </Rectangle.Fill>
    </Rectangle>
</Button>

しかし、このコードでは何もレンダリングされませんか?:

<Button>
    <Rectangle Width="28" Height="28">
        <Rectangle.Style>
            <Style TargetType="{x:Type Rectangle}">
               <Setter Property="Fill">
                    <Setter.Value>
                        <VisualBrush Stretch="Fill" Visual="{StaticResource lovely_image}" />                               
                    </Setter.Value>
                </Setter>
            </Style>
        </Rectangle.Style>
    </Rectangle>
</Button>

興味深いことに、VisualBrush2 番目の例の を に置き換えるとSolidColorBrushSolidColorBrushレンダリングされます。

(なぜこれを行うのですか? DataTriggers を使用して、ViewModel の値に基づいてアイコンを交換しようとしています。)

アップデート

したがって、このコードは問題なく動作するようです。私の問題は、実際には、ビジュアルを定義するリソースの方法に奇妙な点がありました。ビジュアルは、参照されたアセンブリから読み込まれているブラシ動的リソースを使用しました。これは上記の最初の例では機能しましたが、何らかの理由で 2 番目の例では機能しませんでした。プロジェクト アセンブリと viola! のリソースにブラシをコピーしたところ、lovely_imageレンダリングされました。

4

1 に答える 1

1

ASolidColorBrushは抽象的で、複数の場所で使用できます。ビジュアルはそうではなく、親を 1 つしか持つことができません。

x:Shared="false"リソースでビジュアルを試すことができます。または、 を使用しButton.ContentTemplateてボタンを複数作成しますRectangles(ビジュアルをインライン化Contentし、適用するには何かに設定する必要があります)。

また、質問のコードが問題ないため、これが複数のインスタンスに関するものではない場合:依存関係プロパティの値の優先順位に注意してください。

于 2012-09-07T19:28:26.873 に答える