如果我在 ViewModel 类中有布尔变量,请说
public bool test = true;
(这是在C#中)
XAML / Expression Blend中是否仍然可以使用此变量并将其更改为 false使用PURELY XAML,没有代码或任何代码?
我想为鼠标移动事件做这件事。 如果鼠标位于某个对象上,则布尔变量应该变为false,否则它应该保持为真。
答案 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;
}
}