2009-09-16 11 views
0

Si j'ai laisse direWPF/XAML/C# Définition d'une variable booléenne sur MouseOver

public bool test = true;booléenne variables dans un ViewModel classe, (Ceci est en C#)

Y at-il FAÇON dans XAML/Expression Blend pour prendre cette variable et la changer en false UTILISER PURELY XAML, aucun code derrière ou quoi que ce soit?

Je veux faire cela pour un survol de la souris. Si la souris est sur un certain objet, la variable booléenne devrait devenir fausse, sinon elle devrait rester vraie.

+0

Normalement, vous gérez dans votre ViewModel pour rendre plus facile la liaison de données. Si vous ne voulez pas retourner le bool dans votre ViewModel, vous pouvez écrire un contrôle personnalisé qui a une propriété MouseOver qui fonctionne comme vous l'aimez. Les clients utilisant ce contrôle n'auront plus besoin de code depuis lors car ils sont contrôlés. Une autre alternative consiste à utiliser un ValueConverter dans votre liaison qui retourne une valeur booléenne. –

+0

Pourquoi votre ViewModel veut-il savoir si la souris survole un contrôle utilisé pour en afficher une partie? –

Répondre

1

Réponse 1 (plus facile):

Pourquoi ne pas le faire?

public bool Test 
{ 
    get { return myControl.IsMouseOver; } 
} 

Je sais que vous voulez le faire dans tous XAML, mais puisque vous êtes déjà déclarer la propriété, vous pourriez aussi bien faire au lieu de dire.

public bool Test = false; 

Réponse 2 (plus de code, approche MVVM qui est mieux à long terme):

Ici fondamentalement, vous créez une propriété de dépendance (appelé Test) sur Window1, et sur le côté XAML , vous créez un style pour Window1 qui dit que sa propriété Test sera la même que la propriété du bouton IsMouseOver (j'ai quitté l'événement myButton_MouseEnter pour que vous puissiez vérifier l'état de la variable lorsque la souris est sur le bouton, je me suis vérifié change à true, vous pouvez supprimer le gestionnaire MouseEnter et cela fonctionnera toujours)

XAML:

<Window x:Class="StackOverflowTests.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" x:Name="window1" Height="300" Width="300" 
    xmlns:local="clr-namespace:StackOverflowTests"> 
    <Window.Resources> 
     <Style TargetType="{x:Type local:Window1}"> 
      <Setter Property="Test" Value="{Binding ElementName=myButton, Path=IsMouseOver}"> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <Grid> 
     <Button x:Name="myButton" Height="100" Width="100" MouseEnter="myButton_MouseEnter"> 
      Hover over me 
     </Button> 
    </Grid> 
</Window> 

C#:

public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 

     public bool Test 
     { 
      get { return (bool)GetValue(TestProperty); } 
      set { SetValue(TestProperty, value); } 
     } 

     // Using a DependencyProperty as the backing store for Test. This enables animation, styling, binding, etc... 
     public static readonly DependencyProperty TestProperty = 
      DependencyProperty.Register("Test", typeof(bool), typeof(Window1), new UIPropertyMetadata(false)); 

     private void myButton_MouseEnter(object sender, MouseEventArgs e) 
     { 
      bool check = this.Test; 
     } 
    } 
Questions connexes