我想创建以下功能:我希望能够在窗口上显示图像(如果已提供),或者如果图像不存在则显示线性渐变画笔。我提出了两种方法:
创建Border
并将ImageBrush
应用于边境Background
属性
提供了图片Uri
,如果没有,则为LinearGradientBrush
。这很容易
实现:视图模型将提供带有图像的边框背景属性
刷或线性渐变刷。但是有一个大问题:如果图像尺寸
不适合边框尺寸,图像变形,这是我希望避免的。是
有一种方法来设置ImageBrush
并保持图像尺寸比,即
应用类似Stretch = Stretch.Uniform
的内容?
在其中创建Border
和Image
。然后,为其创建数据触发器
边框,如果图像Uri
(视图模型中的属性)为null
,则设置
Background
边框的LinearGradientBrush
,如果是,请将其留空
除此以外。我试过创建它,但数据触发器永远不会理解null
案件。 Image
也存在问题,因为如果提供了null
ImageSource
属性,抛出异常。代码如下所示:
<Border Width="130" Height="170">
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding Image}" Value="{x:Null}">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#696969" Offset="0.0" />
<GradientStop Color="#2E2E2E" Offset="1.0" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Image Name="image" Stretch="Uniform">
<Image.Source>
<BitmapImage
DecodePixelWidth="{Binding ElementName=image, Path=Width}"
UriSource="{Binding Path=Image}" />
</Image.Source>
</Image>
</Border>
实现此类功能的最佳和最简单的方法是什么?感谢。
答案 0 :(得分:1)
ImageBrush
派生自TileBrush
类,其具有Stretch
属性。所以你不能使用像Stretch = Stretch.Uniform
这样的东西,而是使用{。}}。