Как «заморозить» пользовательский интерфейс (главное окно) при наведении курсора мыши

Чего я хочу добиться, так это того, что при наведении курсора мыши на главное окно все элементы пользовательского интерфейса должны зависать, что, я думаю, можно сделать, установив для Window.IsEnabled значение false, а после того, как мышь покинет главное окно, все должно быть вернуться к нормальной жизни.

Я попытался определить триггер свойства в стиле, ориентированном на окно, но это не сработало. Код такой же пустой,

<Style.Triggers>
    <Trigger Property="Window.IsMouseOver" Value="True">
        <Setter Property="Window.IsEnabled" Value="false"/>
    </Trigger>
</Style.Triggers>

На самом деле, этот тип триггера свойства не будет работать и в Grid. Кто-нибудь может дать пояснения?

Я также попытался явно использовать события MouseEnter и MouseLeave в Window и установить логику отключения/включения в обработчиках. Это работает. Интересно, можно ли это сделать в XAML?


person esun203    schedule 01.11.2011    source источник
comment
Хм.... Если вы полностью отключаете ввод, не забудьте также отключить сенсорный ввод и клавиатуру!   -  person djdanlib    schedule 01.11.2011
comment
как отключить тач и клавиатуру?   -  person esun203    schedule 02.11.2011
comment
Я хочу сказать, что я мог бы, вероятно, перейти к вашей программе, нажав Alt + Tab, если бы я хотел взаимодействовать с ней с помощью клавиатуры, поскольку вы реагируете только на события мыши. Вы должны попытаться обнаружить любой фокус ввода, но даже в этом случае, если вам нужно создать такое странное поведение... вы, возможно, захотите переосмыслить свой дизайн?   -  person djdanlib    schedule 02.11.2011


Ответы (1)


Ну, если честно, я не знаю, почему ваш код не работает, я думаю, что это какой-то конфликт, но я не знаю, почему

В любом случае вы можете сделать это в XAML с помощью eventsetter. Это не так элегантно, но работает.

<Window.Triggers>
    <EventTrigger RoutedEvent="Window.MouseEnter">
        <BeginStoryboard>
            <Storyboard Name="sb">
                <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsEnabled" >
                    <BooleanKeyFrameCollection>
                        <DiscreteBooleanKeyFrame Value="False" KeyTime="0:0:0:1"></DiscreteBooleanKeyFrame>
                    </BooleanKeyFrameCollection>
                </BooleanAnimationUsingKeyFrames>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Window.Triggers> 
person MaRuf    schedule 01.11.2011