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>

有趣的是,如果我用 a 替换VisualBrush第二个示例中的SolidColorBrush,则SolidColorBrush渲染。

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

更新

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

4

1 回答 1

1

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

您可以尝试x:Shared="false"资源中的视觉效果。或使用Button.ContentTemplate使按钮创建多个Rectangles(内联视觉和Content需要设置为应用它的东西)。

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

于 2012-09-07T19:28:26.873 回答