2013-01-03 22 views
0

示例: 有兩個控件:一個是600「像素」寬,另一個是200「像素」寬,直接顯示在第一個控件的下方,與它對齊。第一個控件的背景是在某些資源字典中定義的LinearGradientBrush同步兩個控件的畫筆背景

目標: 我想要第二個控件的背景與第一個控件同步,使得第二個控件看起來像是第一個控件的擴展。

問題: 簡單的背景綁定不是一個選項,因爲第二個控件的背景將拉伸超過200「像素」的LinearGradientBrush,而第一個控件將其拉伸超過600「像素」。 是的,我可以手動定義一個新的筆刷,以便第二個控件與第一個控件匹配,但是如果我更改了任何東西(控件大小,筆刷),我將不得不手動更新第二個筆刷。我希望背景自動同步。

有沒有很好的解決方案LinearGradientBrush? 是否有適用於所有類型刷子的通用解決方案?

回答

0

請問以下情況適合您。包含1個大的控件,如上所述。另一個控件填充你的兩個空間沒有覆蓋的空間。在您的兩個控件上使用具有透明背景的設計背景的大容量控件。最後的填充控件將使用綁定所有這些的父控件。希望這是有道理的。 )

+0

是的,這絕對是簡單一個很好的解決方案情景,但是當第二個控件(或它們兩個)臨時顯示在其他很多控件的頂部時,實現它實際上是不可能的。當第一個控件的窗口在另一個程序集中定義並且我想添加與第一個控件匹配的第二個控件時,事情會變得更加複雜。 – RaceRalph

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

這實際上是手動定義筆刷,如果任何控件更改其大小或原始筆刷(定義在其他地方,可能在另一個程序集中)更改,它將不起作用。 – RaceRalph

+0

這應該工作,如果我提到的控件之間的比例是恆定的,如果不是,我想你可以使用轉換器來計算什麼偏移量應該使用控件的高度/寬度作爲參數。這樣你也可以在兩個控件上使用相同的筆刷,並設置偏移量,使其看起來像是一個伸展兩個控件的筆刷。 – Eirik