我想创建以下功能:我希望能够在窗口上显示图像(如果提供了图像),或者如果图像不存在,则可以使用线性渐变画笔。我想出了两种方法:WPF:处理图像
要创建一个
Border
如果 图像0提供,或LinearGradientBrush
如果不适用ImageBrush
边境Background
财产。这很容易 实现:视图模型将提供边界背景属性或图像 画笔或线性渐变画笔。但是有一个大问题:如果图像尺寸 不符合边框尺寸,则图像会变形,这是我希望避免的。是 有一种方法来设置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>
什么是最好的,以实现这样的功能最简单的方法?谢谢。
哈,它似乎我错过了它的属性列表(http://msdn.microsoft.com/en-us/library/system.windows.media.imagebrush.aspx)。谢谢丹尼斯! – Boris 2011-04-25 14:12:49