2010-06-11 4 views
2

J'ai téléchargé Microsoft Visual Studio 2010 Express pour Windows Phone et j'ai écrit une application simple pour effectuer un premier test de l'émulateur. Dans cette application, je n'ai qu'un bouton avec la propriété Contenu lié à une chaîne appelée ButtonText et à la propriété Background liée à un SolidColorBrush nommé FillColor. Je me suis occupé de l'événement Cliquez avec ce code:
Premier test d'une application Windows Phone

void MyButton_Click(object sender, RoutedEventArgs e) 
    { 
     if (toggle == true) 
     { 
      ButtonText = "Blue"; 
      FillColor = new SolidColorBrush(Colors.Blue); 
     } 
     else 
     { 
      ButtonText = "Red"; 
      FillColor = new SolidColorBrush(Colors.Red); 
     } 
     toggle = !toggle; 
    } 

Malheureusement, cela ne fonctionne pas. Alors que le contenu du bouton change chaque fois que le bouton est enfoncé, je ne peux pas dire la même chose pour l'arrière-plan qui reste à la même couleur.
Pourriez-vous me dire quel est le problème? Je vous remercie.

Je posterai aussi le XAML:

<Grid x:Name="ContentGrid" Grid.Row="1"> 
     <Button Name="MyButton" Width="300" Height="300" 
       Content="{Binding Path=ButtonText}" 
       Background="{Binding Path=FillColor}" /> 
    </Grid> 
+0

Intéressant. Button button1.Background = nouveau SolidColorBrush (Colors.Red); ne fonctionne pas non plus, donc pas un problème. Cela peut valoir la peine d'afficher ceci sur Connect si une explication n'est pas disponible .. il y a une catégorie wp7 sous VS. –

+0

Définition de fillColor = new SolidColorBrush (Colors.Red); fonctionne pour initialiser l'arrière-plan. Cela ne fonctionne pas seulement quand cette propriété est changée. –

+0

définissez-vous le dataContext de la page? –

Répondre

1

Le problème est dû à l'utilisation de la "nouvelle" dans la ligne:

FillColor = new SolidColorBrush (Colors.Blue); L'utilisation de la "nouvelle" opération interrompt la liaison de données précédemment configurée. Essayez d'utiliser ce qui suit à la place:

FillColor.Color = Colors.Blue;

Remplacez les deux changements en bleu et en rouge et cela devrait faire l'affaire.

HTH!
Chris

+0

Merci pour votre réponse. Le type de FillColor n'est pas Color, mais SolidColorBrush. Si je le convertis en couleur cela ne fonctionnait pas parce que le type d'arrière-plan n'est pas couleur. En outre, je ne suis pas d'accord avec vous quand vous dites que la "nouvelle" opération brise la liaison de données, en fait les mêmes solutions fonctionnent parfaitement dans un site Web Silverlight. –

+0

Si vous remarquez dans ma réponse, je vous suggère de changer la valeur de la propriété Color de FillColor, pas la propriété FillColor elle-même. Dans ma recréation de votre problème qui a réglé le problème de base. J'ai rencontré ce même problème avec ObservableCollection où la création d'une instance à l'intérieur de votre code après la liaison de données effacera la liaison. Je peux fournir des exemples complets de code pour montrer ceci plus en détail si vous êtes intéressé ... –

+0

Merci encore Chris. Je suis intéressé par votre exemple de code. Vous pouvez trouver mon adresse e-mail dans mon profil. Je serai heureux de votre aide si vous m'envoyez les échantillons de code. –