WPF / XAML / C#在MouseOver上设置布尔变量

时间:2009-09-16 19:13:31

标签: wpf xaml mouseover

如果我在 ViewModel 类中有布尔变量,请说

public bool test = true;(这是在C#中)

XAML / Expression Blend中是否仍然可以使用此变量并将其更改为 false使用PURELY XAML,没有代码或任何代码?

我想为鼠标移动事件做这件事。 如果鼠标位于某个对象上,则布尔变量应该变为false,否则它应该保持为真。

1 个答案:

答案 0 :(得分:0)

回答1(最简单):

为什么不这样做?

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

我知道你想在所有的XAML中做到这一点,但既然你已经宣布了这个属性,你可以这样做,而不是说。

public bool Test = false;

回答2(更多代码,MVVM方法从长远来看更好):

这里基本上,你在Window1上创建一个依赖属性(称为Test),在XAML一侧,你为Window1创建一个样式,它说它的Test属性与按钮IsMouseOver属性相同(我离开了myButton_MouseEnter)事件,所以当鼠标悬停在按钮上时你可以检查变量的状态,我检查了自己,它确实变为true,你可以删除MouseEnter处理程序,它仍然可以工作)

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;
        }
    }