2011-04-20 5 views
0

dans mon fichier de projet en cours J'ai un contrôle utilisateur qui a une animation de storyboard appliquée au contrôle. Quand un bouton est cliqué dans la page, le storyboard démarre et présente visuellement le contrôle à l'utilisateur. Le story-board réside dans la page courante comme une ressourceen utilisant des événements routés dans les contrôles utilisateur Silverlight

<navigation:Page.Resources> 
    <Storyboard x:Name="PreferncesOpen">....</Storyboard x:Name="PreferncesOpen"> 
     </navigation:Page.Resources> 

Dans la page je bouton que j'ai un événement click sur qui commence le story-board

private void btnOpenPreferences_Click(object sender, RoutedEventArgs e) 
    { 
     preferencesPanel.Visibility = System.Windows.Visibility.Visible; 
     PreferncesOpen.Begin(); 
    } 

Dans le UserControl (preferencesPanel) J'ai bouton qui, lorsque cliqué, doit fermer/réduire le contrôle utilisateur. Je prévois de le faire en utilisant Visibility.collapsed. Je suppose que j'ai besoin d'utiliser des commandes routées puisque le bouton est dans le contrôle de l'utilisateur, mais les actions doivent être appelées dans la page qui contient le contrôle? Je suis encore nouveau pour les commandes routées et je suppose que c'est la bonne approche. Je ne suis pas sûr comment cliquer sur un bouton dans le contrôle d'utilisateur et l'ai-je modifier ou exécuter des commandes qui affecteraient la façon dont la page (dans laquelle ce contrôle réside) peut changer ou affecter d'autres éléments dans la page? Par exemple, lorsque le bouton est cliqué dans le contrôle utilisateur, j'aimerais que la visibilité du contrôle utilisateur soit réduite. Je voudrais également avoir la largeur de l'une des colonnes de la grille dans la taille de la page principale. Je l'ai fait dans le passé en utilisant le code derrière pour la page mais j'essaie de séparer une partie de cela et je pensais que les commandes routées seraient la voie à suivre? J'apprécierais beaucoup de conseils.

Nous vous remercions à l'avance

Répondre

0

Le titre est un peu trompeur, vous poser des questions sur les commandes des événements plutôt que si routé je vous comprends bien.

Voici un exemple d'utilisation d'un DelegateCommand<T> de la bibliothèque Prism; Il se trouve que c'est ma préférence personnelle.

Markup:

<Button x:Name="MyButton" Content="Btn" Command="{Binding DoSomethingCommand}"/> 

code-behind * ou ViewModel:

(* si vous ne l'utilisez MVVM assurez-vous d'ajouter MyButton.DataContext = this; de sorte que vous êtes sûr que le bouton peut être connecté à votre code efficacement)

public DelegateCommand<object> DoSomethingCommand 
{ 
    get 
    { 
     if(mDoSomethingCommand == null) 
      mDoSomethingCommand = new DelegateCommand(DoSomething, canDoSomething); 
     return mDoSomethingCommand; 
    } 

private DelegateCommand<object> mDoSomethingCommand; 

// here's where the command is actually executed 
void DoSomething(object o) 
{} 

// here's where the check is made whether the command can actually be executed 
// insert your own condition here 
bool canDoSomething(object o) 
{ return true; } 


// here's how you can force the command to check whether it can be executed 
// typically a reaction for a PropertyChanged event or whatever you like 
DoSomethingCommand.RaiseCanExecuteChanged(); 

L'argument qui est pa ssed à la fonction ci-dessus est la propriété de dépendance CommandParameter (dans Prism c'est une propriété jointe ainsi que la propriété Command si la mémoire me sert bien). Lorsqu'il est défini, vous pouvez transmettre une valeur de votre choix à la commande que vous souhaitez exécuter.

Espérons que ça aide.

Questions connexes