VisualBrush无法在Style中呈现

时间:2012-09-07 19:22:08

标签: .net wpf silverlight xaml

为什么我的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>

有趣的是,如果我使用VisualBrush替换第二个示例中的SolidColorBrush,则SolidColorBrush呈现。

(我为什么这样做?我正在尝试使用DataTriggers根据我的ViewModel中的值交换图标。)

更新

所以看起来这段代码运行得很好。我的问题实际上是我的资源定义我的视觉方式的一些奇怪。视觉使用了从引用的程序集加载的画笔动态资源。这适用于上面的第一个例子,但出于某种原因不适用于第二个例子。我只是将画笔复制到我的项目程序集和中提琴中的资源中,我的lovely_image被渲染。

1 个答案:

答案 0 :(得分:1)

SolidColorBrush是抽象的,可以在多个地方使用。视觉不是,它只能有一个父母。

您可以在资源中尝试x:Shared="false"。或者使用Button.ContentTemplate使按钮创建多个Rectangles(内联视觉和Content需要设置为适合其应用的内容。)

此外,如果这不是关于多个实例,因为您问题中的代码很好:请注意dependency property value precedence