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>
4

1 に答える 1

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;
    }

更新 唯一の問題は、これが機能していないように見えることです。黒い画面しか出ない

于 2012-09-21T09:04:02.793 に答える