为什么我的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
被渲染。
答案 0 :(得分:1)
SolidColorBrush
是抽象的,可以在多个地方使用。视觉不是,它只能有一个父母。
您可以在资源中尝试x:Shared="false"
。或者使用Button.ContentTemplate
使按钮创建多个Rectangles
(内联视觉和Content
需要设置为适合其应用的内容。)
此外,如果这不是关于多个实例,因为您问题中的代码很好:请注意dependency property value precedence。