同步两个控件的笔刷背景
本文关键字:背景 控件 两个 同步 | 更新日期: 2023-09-27 17:50:36
示例:有两个控件:一个宽600"像素",另一个宽200"像素"并显示在第一个控件的正下方,与第一个控件右对齐。第一个控件背景是某个资源字典中定义的LinearGradientBrush
。
目标:我希望第二个控件的背景与第一个控件同步,使第二个控制器看起来像第一个控件的扩展。
问题:简单的背景绑定不是一个选项,因为第二个控件的背景会将LinearGradientBrush
拉伸到200"像素"以上,而第一个控件会将其拉伸到600"像素"。是的,我可以手动定义一个新的笔刷,以便第二个控件与第一个控件匹配,但如果我更改了任何内容(控件大小、笔刷(,我将不得不再次手动更新第二个笔刷。我希望背景能自动同步。
LinearGradientBrush
有一个好的解决方案吗?是否有适用于所有类型刷子的通用解决方案?
以下内容适用于您吗。1个大控件,包含所述的两个控件。另一个控件填补了您的两个控件未覆盖的空白。在两个控件上都有透明背景的大型包含控件和您设计的背景。最后一个填充控件将使用绑定所有这些控件的父控件。希望这是有道理的。(
如果控件之间的比率是恒定的,则可以通过调整偏移量使背景"拉伸"控件,如下所示:
<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>