2010-05-20 25 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