2009-03-28 13 views
3

J'essaie actuellement de comprendre comment réutiliser un modèle dans d'autres modèles de contrôle (comme le dit le titre). Ce que j'essaye de faire est de faire un tas de boutons qui sont tous légèrement différents mais qui ont plusieurs caractéristiques similaires. Ils partagent tous plusieurs des mêmes éléments graphiques et ont les mêmes déclencheurs qui traitent de ces éléments graphiques. Ce que j'espère faire, c'est pouvoir sortir ce code et le mettre dans un autre modèle et avoir juste tous les boutons faisant référence à ce modèle. De cette façon, il est plus facile de gérer et a plus de sens dans l'ensemble. Je suis sûr qu'il y a un moyen, mais je suis encore un peu nouveau à WPF. Merci pour toute aide!WPF Réutilisation d'un modèle dans d'autres ControlTemplates

EDIT: Voici un code montrant ce que je veux faire.

<ControlTemplate x:Key="LeftJustifyButtonTemplate" TargetType="{x:Type RadioButton}"> 
    <Grid Width="24" Height="24"> 
     <Rectangle HorizontalAlignment="Stretch" Fill="#00000000" Stroke="{x:Null}"/> 
     <Rectangle x:Name="backRectangle" HorizontalAlignment="Stretch" Margin="0,0,0,0" Stroke="#FFB9B9B9" StrokeThickness="0.5" RadiusX="4" RadiusY="4" Visibility="Hidden"> 
      <Rectangle.Fill> 
       <LinearGradientBrush EndPoint="0.146,0.146" StartPoint="2.057,2.057"> 
        <GradientStop Color="#FF000000" Offset="0"/> 
        <GradientStop Color="#FFFFFFFF" Offset="1"/> 
       </LinearGradientBrush> 
      </Rectangle.Fill> 
     </Rectangle> 
     <Rectangle x:Name="foreRectangle" Margin="1,1,1,1" VerticalAlignment="Stretch" Fill="#FFE0E0E0" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="4" RadiusY="4" Visibility="Hidden"/> 
     <Path Margin="2.875,7,2.875,0" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M2.875,7.5 L21.145964,7.5" VerticalAlignment="Top" Height="1" StrokeThickness="0.5"/> 
     <Path Margin="2.875,9.375,8,0" VerticalAlignment="Top" Height="1" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M3.625,4 L17.514069,4" StrokeThickness="0.5"/> 
     <Path Margin="2.875,11.5,2.875,11.5" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M2.875,7.5 L21.145964,7.5" StrokeThickness="0.5"/> 
     <Path Margin="2.875,0,8,9.375" VerticalAlignment="Bottom" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M3.625,4 L17.514069,4" Height="1" StrokeThickness="0.5"/> 
     <Path Margin="2.875,0,2.875,7" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M2.875,7.5 L21.145964,7.5" VerticalAlignment="Bottom" Height="1" StrokeThickness="0.5"/> 
    </Grid> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter TargetName="backRectangle" Property="Visibility" Value="Visible"/> 
      <Setter TargetName="foreRectangle" Property="Visibility" Value="Visible"/> 
     </Trigger> 
     <Trigger Property="IsChecked" Value="True"> 
      <Setter TargetName="backRectangle" Property="Visibility" Value="Visible"/> 
      <Setter TargetName="foreRectangle" Property="Visibility" Value="Visible"/> 
      <Setter TargetName="foreRectangle" Property="Fill" Value="#FFFFFFFF"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

À peu près tout cela, à l'exception des 5 chemins au milieu, est utilisé dans plusieurs boutons. C'est parce qu'il est utilisé pour la souris sur et déclenché des déclencheurs. Ce que je veux faire est de pouvoir avoir tout ce code à un endroit et ensuite avoir plusieurs boutons pour pouvoir référencer ce code.

+0

Pas de chance avec celui-ci? J'allais poser à peu près la même question. – djschwartz

Répondre

0

De quel genre de différence parlez-vous exactement? Vous pourriez être en mesure de le retirer avec une combinaison de propriétés et de déclencheurs, mais nous aurions besoin d'en savoir plus sur votre problème.

0

Je ne crois pas que vous pouvez le faire avec des modèles, mais vérifiez la propriété BasedOn du style.