同步两个控件的画笔背景

时间:2013-01-03 11:17:31

标签: c# wpf xaml

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果控件之间的比例不变,则可以使背景"延伸到"通过调整偏移来控制,如下所示:

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