2010-03-02 4 views
1

J'ai un bouton que j'ai modifié dans Mélange (en utilisant Modifier le modèle courant). J'ai ajouté mes animations pour la souris sur etc et le bouton fonctionne comme prévu.Comment autoriser l'utilisateur à changer de propriété dans un modèle?

Cependant, sur l'événement mouse over, j'ai une forme qui s'échelonne. Ce que je veux faire est de donner à l'utilisateur la possibilité de définir en XAML les propriétés de rotation et de mise à l'échelle.

Ainsi, par exemple, quelque chose comme ceci:

<Button Height="76" Content="Gallery" Style="{StaticResource RotatingAnimationButton}" " Scaling="2.0" >

où dans le modèle que j'ai:

<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Document" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0]. (ScaleTransform.ScaleX)">

où Value = "1.5" serait remplacé par "2.0" .

Actuellement, tout ce que j'ai est le style du modèle. Je ne suis pas sûr si je peux passer dans les paramètres ou je dois créer une sorte de contrôle d'utilisateur?

JD

Note: Cette question a été affiché comme Silverlight et WPF. Mais comme vous le verrez, cela ne s'applique qu'à Silverlight, c'est pourquoi les excellentes solutions fournies m'ont causé des problèmes.

Répondre

2

Vous avez deux bonnes options:

  1. Vous pouvez sous-classe Button et ajouter une propriété « Mise à l'échelle », ou
  2. Vous pouvez créer un joint « Mise à l'échelle » la propriété et l'attacher à bouton

Dans les deux cas, votre animation peut s'y lier.

À moins que votre bouton ne soit personnalisé d'une autre manière, j'irais généralement avec la propriété attachée. Vous utilisez un modèle de propriété standard ci-joint (utiliser l'extrait « propa »):

public class MyAttachedProperties 
{ 
     // Scaling 
    public static double GetScaling(DependencyObject obj) { return (double)obj.GetValue(ScalingProperty); } 
    public static void SetScaling(DependencyObject obj, double value) { obj.SetValue(ScalingProperty, value); } 
    public static readonly DependencyProperty ScalingProperty = DependencyProperty.RegisterAttached("Scaling", typeof(double), typeof(MyAttachedProperties)); 
} 

Dans le code qui utilise le bouton que vous souhaitez faire référence comme ceci:

<Button Height="76" Content="Gallery" 
     Style="{StaticResource RotatingAnimationButton}" 
     local:MyAttachedProperties.Scaling="2.0" /> 

Dans le modèle que vous lier comme ceci:

Value="{Binding Path=(local:MyAttachedProperties.Scaling), 
       RelativeSource={RelativeSource TemplatedParent}}" 

ces deux bits de XAML suppose que vous avez xmlns: définis locale pour inclure la classe MyAttachedProperties.

+0

+1 Corriger les options. –

+0

@Ray: Merci beaucoup. Avec votre première option, vous avez mentionné le "bouton est personnalisé d'autres façons", pouvez-vous expliquer plus? –

+0

Vous pourriez envisager de sous-classer Button ou ButtonBase pour ajouter de nouvelles fonctionnalités significatives. Par exemple, j'ai créé une classe de bouton de confirmation qui affiche une boîte de dialogue de type "Êtes-vous sûr" avec du texte personnalisé, des étiquettes de bouton, des couleurs, etc ... Il y avait suffisamment de fonctionnalités personnalisées pour les sous-classes. Comme un autre exemple, CheckBox est vraiment un genre de bouton (il dérive de ButtonBase), comme GridViewColumnHeader. –

Questions connexes