Ответ 1 (самый простой):
Почему бы не сделать это?
public bool Test
{
get { return myControl.IsMouseOver; }
}
Я знаю, что вы хотите сделать это во всем XAML, но, поскольку вы уже объявляете свойство, вы могли бы сделать это вместо того, чтобы сказать.
public bool Test = false;
Ответ 2 (больше кода, метод MVVM, который лучше в долгосрочной перспективе):
Здесь в основном вы создаете свойство зависимости (называемое Test) для Window1, а на стороне 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;
}
}