2010-05-20 24 views
2

我想使用樣式設置網格的背景。 我的風格我設置了網格的背景屬性。Silverlight中的自定義網格樣式4

但我有一個邊框填充LinearGradientFill和其中也有LinearGradientFill的路徑。

但我無法將兩者結合起來。

以下是樣本代碼。我想創造它作爲一種風格。

<Grid> 
<Border BorderBrush="Black" BorderThickness="2"> 
       <Border.Background> 
        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5"> 
         <GradientStop Color="Black" Offset="0.953" /> 
         <GradientStop Color="White" Offset="0" /> 
        </LinearGradientBrush> 
       </Border.Background> 
      </Border> 
      <Path Data="M 0,0 C 0,620 10,10 560,0" Height="60" VerticalAlignment="Top"> 
       <Path.Fill> 
        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5"> 
         <GradientStop Color="Black" Offset="0" /> 
         <GradientStop Color="White" Offset="0.779" /> 
        </LinearGradientBrush> 
       </Path.Fill> 
      </Path> 
</Grid> 

它給我一個錯誤,因爲屬性'值'被設置多次。

任何人都可以幫助我嗎? 謝謝。

+0

這本來是更好,如果你提供了是失敗 – AnthonyWJones 2010-05-20 15:42:03

+0

@Anthony相關的XAML,請參閱修改問題。 – Archie 2010-05-20 16:06:13

回答

4

阿奇,

你需要以任意XAML放入一個風格來使用的模板。不幸的是,只有控件有模板,而網格和邊框不是控件。但有一個解決方案。雖然沒有你想要的那麼幹淨,但下面的XAMl應該能夠實現你的目標。您粘貼以下XAML爲Charles Petzold's XAML Cruncher看到的結果:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Width="400" Height="400"> 
    <UserControl.Resources> 
     <!-- A ContentControl template that defines your background --> 
     <ControlTemplate x:Key="BackgroundTemplate" TargetType="ContentControl"> 
      <Grid> 
       <Border BorderBrush="Black" BorderThickness="2"> 
        <Border.Background> 
         <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5"> 
          <GradientStop Color="Black" Offset="0.953" /> 
          <GradientStop Color="White" Offset="0" /> 
         </LinearGradientBrush> 
        </Border.Background> 
       </Border> 
       <Path Data="M 0,0 C 0,620 10,10 560,0" Height="60" VerticalAlignment="Top"> 
        <Path.Fill> 
         <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5"> 
          <GradientStop Color="Black" Offset="0" /> 
          <GradientStop Color="White" Offset="0.779" /> 
         </LinearGradientBrush> 
        </Path.Fill> 
       </Path> 
      </Grid> 
     </ControlTemplate> 
     <!-- A ContentControl Style that references the background template --> 
     <Style x:Key="BackgroundStyle" TargetType="ContentControl"> 
      <Setter Property="Template" Value="{StaticResource BackgroundTemplate}" /> 
     </Style> 
    </UserControl.Resources> 

    <!-- Typical usage; place the background ContentControl behind your body content --> 
    <Grid x:Name="LayoutRoot"> 
     <ContentControl Style="{StaticResource BackgroundStyle}" /> 
     <TextBlock Text="Your Content" Foreground="Red" FontSize="36" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
    </Grid> 
</UserControl> 
+0

對不起,我把它寫成grid.background。我編輯了上面的代碼。但我想把它作爲一種風格應用。我可以做嗎? – Archie 2010-05-20 16:30:23

+0

@Archie,我編輯了我的答案,給你解決方案作爲一種風格。我希望這個對你有用。 – 2010-05-21 13:32:58

+0

@JimMcCurdy:很好的解決方案,但正如你所說的不是最漂亮的。它雖然做了這項工作。任何你爲什麼不把控制模板放入風格的原因,以保持簡單? – Terry 2013-01-22 12:43:12