2010-05-20 5 views
2

Я хочу установить фон сетки, используя стиль. I style Я устанавливаю фоновое свойство сетки.пользовательский стиль сетки в silverlight 4

Но у меня есть граница, заполненная LinearGradientFill и Path, в которой также есть 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

Было бы лучше, если бы вы снабжали соответствующий XAML, который неисправный – AnthonyWJones

+0

@Anthony, пожалуйста, см модифицированного вопроса. – Archie

ответ

4

Archie,

Вы должны использовать шаблон, чтобы поместить произвольный код 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

+0

@Archie, я отредактировал свой ответ, чтобы дать вам решение как стиль. Надеюсь, это сработает для вас. –

+0

@JimMcCurdy: отличное решение, но, как вы сказали, не самый красивый. Это делает работу, хотя. Любая причина, по которой вы просто не помещаете контрольную таблицу в стиль, чтобы она была проще? – Terry

Смежные вопросы