2010-01-19 4 views
0

je le modèle de contrôle:modèle de contrôle d'accès propriété

<ControlTemplate x:Key="GlassButton" TargetType="{x:Type Button}"> 
     <ControlTemplate.Resources> 
      <Storyboard x:Key="Timeline1"> 
       <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)"> 
        <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1"/> 
       </DoubleAnimationUsingKeyFrames> 
      </Storyboard> 
      <Storyboard x:Key="Timeline2"> 
       <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)"> 
        <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/> 
       </DoubleAnimationUsingKeyFrames> 
      </Storyboard> 
     </ControlTemplate.Resources> 
     <Border BorderBrush="#FFFFFF" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4"> 
      <Border x:Name="border" Background="#7F0000" BorderBrush="#FF000000" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="0.507*"/> 
         <RowDefinition Height="0.493*"/> 
        </Grid.RowDefinitions> 
        <Border Opacity="0" HorizontalAlignment="Stretch" x:Name="glow" Width="Auto" Grid.RowSpan="2" CornerRadius="4,4,4,4"> 
         <Border.Background> 
          <RadialGradientBrush> 
           <RadialGradientBrush.RelativeTransform> 
            <TransformGroup> 
             <ScaleTransform ScaleX="1.702" ScaleY="2.243"/> 
             <SkewTransform AngleX="0" AngleY="0"/> 
             <RotateTransform Angle="0"/> 
             <TranslateTransform X="-0.368" Y="-0.152"/> 
            </TransformGroup> 
           </RadialGradientBrush.RelativeTransform> 
           <GradientStop Color="#B28DBDFF" Offset="0"/> 
           <GradientStop Color="#008DBDFF" Offset="1"/> 
      </RadialGradientBrush> 
         </Border.Background> 
        </Border> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Width="Auto" Grid.RowSpan="2"/> 
        <Border HorizontalAlignment="Stretch" Margin="0,0,0,0" x:Name="shine" Width="Auto" CornerRadius="4,4,0,0"> 
         <Border.Background> 
          <LinearGradientBrush EndPoint="0.494,0.889" StartPoint="0.494,0.028"> 
           <GradientStop Color="#99FFFFFF" Offset="0"/> 
           <GradientStop Color="#33FFFFFF" Offset="1"/> 
      </LinearGradientBrush> 
         </Border.Background> 
        </Border> 
       </Grid> 
      </Border> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsPressed" Value="True"> 
       <Setter Property="Opacity" TargetName="shine" Value="0.4"/> 
       <Setter Property="Background" TargetName="border" Value="#CC000000"/> 
       <Setter Property="Visibility" TargetName="glow" Value="Hidden"/> 
      </Trigger> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Trigger.EnterActions> 
        <BeginStoryboard Storyboard="{StaticResource Timeline1}"/> 
       </Trigger.EnterActions> 
       <Trigger.ExitActions> 
        <BeginStoryboard x:Name="Timeline2_BeginStoryboard" Storyboard="{StaticResource Timeline2}"/> 
       </Trigger.ExitActions> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

Maintenant, je veux appliquer ce modèle à un certain nombre de boutons différents. Cependant, j'aimerais que la couleur de fond soit différente pour chaque bouton. La propriété du modèle de contrôle Je cherche à changer pour chaque bouton est l'arrière-plan de la frontière

<Border x:Name="border" Background="#7F0000"> 

Je dois être en mesure de définir des valeurs différentes pour ce contexte. Le définir comme

<Button Background="Yellow" Template="{DynamicResource GlassButton}"> 

ne fonctionne pas.

Des idées?

Merci.

Répondre

1

Sur l'élément Border auquel vous souhaitez appliquer l'arrière-plan, liez comme suit:

<Border x:Name="border" Background="{TemplateBinding Background}"... 
+0

Grande, qui fonctionne comme un charme. Sur une note connexe, est-il possible de faire quelque chose de similaire avec les couleurs d'arrêt de gradient des frontières de lueur et de brillance? Je veux dire, est-ce quelque chose qui peut également être contrôlé à partir des boutons individuels auxquels ce modèle est appliqué? – Flack

+0

Les palettes de dégradés, etc. sont fondamentalement une autre brosse que vous souhaitez utiliser sur un autre élément de votre modèle (autre que celle que nous avons déjà vue). Puisque vous n'avez pas deux propriétés 'Background' sur un bouton, il n'y a pas de propriété de type pinceau disponible pour lier l'arrière-plan de cet autre élément. Vous devrez créer un contrôle personnalisé dérivé d'un bouton pour cela, et déclarer quelques propriétés de dépendance supplémentaires. –

Questions connexes