2012-09-21 44 views
2

我需要在WPF中創建一個畫筆,用作面板的背景。刷子有固定的高度,但寬度可變。中間圖像需要平鋪以填充空間,而左側和右側圖像是固定的。我嘗試了一個VisualBrush和一個帶有圖像的網格,但它沒有正確對齊/縮放。這是一個適用於固定寬度的繪圖筆。我如何使它工作,以便平鋪寬度可變的面板的中間圖像?創建由中間圖像平鋪的左,中,右圖像組成的畫筆

<DrawingBrush x:Key="Background"> 
    <DrawingBrush.Drawing> 
     <DrawingGroup> 
       <ImageDrawing Rect="0 0 16 16" ImageSource="Resources/Left.png"/> 
       <ImageDrawing Rect="16 0 16 16" ImageSource="Resources/Middle.png"/> 
       <ImageDrawing Rect="48 0 16 16" ImageSource="Resources/Right.png"/> 
      </DrawingGroup> 
     </DrawingGroup> 
    </DrawingBrush.Drawing> 
</DrawingBrush> 
+0

你看過[TileBrush](http://msdn.microsoft.com/en-us/library/system.windows.media.tilebrush.tilemode.aspx)? – Eirik

+0

DrawingBrush是一個TileBrush。 TileMode不僅適用於整個畫筆的一部分。這就是爲什麼我問是否可以將多個畫筆(使用不同的畫筆模式)合併到一個畫筆中。 –

回答

0

我不知道你實際上可以做到這一點,所以作爲替代用的結合和轉換器生成一個新的畫筆,以適應適當的大小。

<Grid VerticalAlignment="Center" Height="16" Margin="16,0" HorizontalAlignment="Stretch" 
    Background="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self},Converter={StaticResource widthToBrushConverter}}"/> 

,寬刷轉換器

public class WidthToBrushConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var width = (double)value; 

     var result = new DrawingBrush(); 
     var group = new DrawingGroup(); 
     result.Drawing = group; 

     group.Children.Add(new ImageDrawing(new BitmapImage(new Uri(@"Resources\Left.png", UriKind.Relative)), new Rect(0, 0, 16, 16))); 
     group.Children.Add(new ImageDrawing(new BitmapImage(new Uri(@"Resources\Centre.png", UriKind.Relative)), new Rect(16, 0, width, 16))); 
     group.Children.Add(new ImageDrawing(new BitmapImage(new Uri(@"Resources\Right.png", UriKind.Relative)), new Rect(16 + width, 0, 16, 16))); 
     return result; 
    } 

UPDATE 唯一的問題是這似乎並沒有工作。我只是得到一個黑屏