WPF / XAML / C # Установка логической переменной для MouseOver - PullRequest
0 голосов
/ 16 сентября 2009

Если у меня есть логическая переменная в ViewModel классе, скажем,

public bool test = true; (это на C #)

Есть ли ЛЮБОЙ в XAML / Expression Blend, чтобы взять эту переменную и изменить ее на false ИСПОЛЬЗУЯ ЧИСТО XAML, без кода или что-нибудь?

Я хочу сделать это для события мыши. Если указатель мыши находится над определенным объектом, логическая переменная должна стать ложной, в противном случае она должна оставаться истинной.

1 Ответ

0 голосов
/ 17 сентября 2009

Ответ 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;
        }
    }
...