0

示例:有两个控件:一个是 600“像素”宽,另一个是 200“像素”宽并显示在第一个控件的正下方,与它右对齐。第一个控件的背景是LinearGradientBrush在某些资源字典中定义的。

目标:我希望第二个控件的背景与第一个控件同步,使第二个控件看起来像第一个控件的扩展。

问题:不能选择简单的背景绑定,因为第二个控件的背景会拉伸LinearGradientBrush超过 200 个“像素”,而第一个控件会将其拉伸超过 600 个“像素”。是的,我可以手动定义一个新画笔,以便第二个控件与第一个控件匹配,但如果我更改任何内容(控件大小、画笔),我将不得不再次手动更新第二个画笔。我希望背景自动同步。

有没有好的解决方案LinearGradientBrush?是否有适用于所有类型刷子的通用解决方案?

4

2 回答 2

0

If the ratio between the controls is constant, you can make the background "stretch across" the controls by adjusting the offset, like this:

<Grid Width="700" Height="300">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <!-- Horizontal gradient -->
    <Grid Width="600" Grid.Row="1" Grid.Column="1">
        <Grid.Background>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                <GradientStop Color="Red" />
                <GradientStop Color="Green" Offset="1" />
            </LinearGradientBrush>
        </Grid.Background>
    </Grid>
    <Grid Width="200" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Right">
        <Grid.Background>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                <GradientStop Color="Red" Offset="-2" />
                <GradientStop Color="Green" Offset="1" />
            </LinearGradientBrush>
        </Grid.Background>
    </Grid>

    <!-- Vertical gradient -->
    <Grid Width="600" Grid.Row="3" Grid.Column="1">
        <Grid.Background>
            <LinearGradientBrush StartPoint="1,0" EndPoint="1,1">
                <GradientStop Color="Blue" />
                <GradientStop Color="Yellow" Offset="2" />
            </LinearGradientBrush>
        </Grid.Background>
    </Grid>
    <Grid Width="200" Grid.Row="4" Grid.Column="1" HorizontalAlignment="Right">
        <Grid.Background>
            <LinearGradientBrush StartPoint="1,0" EndPoint="1,1">
                <GradientStop Color="Blue" Offset="-1" />
                <GradientStop Color="Yellow" Offset="1" />
            </LinearGradientBrush>
        </Grid.Background>
    </Grid>
</Grid>
于 2013-01-03T12:03:21.290 回答
0

以下内容是否适合您。1 个包含上述两个的大型控件。另一个控件填充了你们两个没有覆盖的空白空间。在您的两个控件上使用带有透明背景的设计背景的大型包含控件。最后一个填充控件将使用绑定所有这些的父控件。希望这是有道理的。;)

于 2013-01-03T11:26:13.693 回答