我想創建以下功能:我希望能夠在窗口上顯示圖像(如果提供了圖像),或者如果圖像不存在,則可以使用線性漸變畫筆。我想出了兩種方法: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