petter2012 Ответов: 0

Как я могу переопределить фокус щелчок мышью в приложении UWP?


Привет,

Я продолжаю бороться со своим фреймворком UWP...

Я могу перетаскивать XAML-вещи с помощью своего указателя мыши.

Я также могу добавить события KeyDown на страницу, и они прекрасно работают.

Однако всякий раз, когда я щелкаю где-то мышью, событие KeyDown больше не срабатывает (я вижу, что оно даже не достигнуто, когда пытаюсь использовать точки останова).


И вот, похоже, щелчок мыши каким-то образом захватывает фокус. Есть ли способ убить событие mouseclick или что-то подобное?

Я написал код ниже, но это не приносит никакой пользы.

public MainPage()
{
    this.KeyDown += Page_KeyDown;

    this.InitializeComponent();



Вот и начало моего кода XAML:

<Page

    x:Class="Spritehand.PhysicsHelper.Demos.UWP.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:local="using:Spritehand.PhysicsHelper.Demos.UWP"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:ph="using:Spritehand.FarseerHelper"

    mc:Ignorable="d" KeyDown="Page_KeyDown">

    <Grid x:Name="LayoutRoot" removed="CornflowerBlue">
        <Canvas x:Name="cnvGameOuter"  >
            <ph:PhysicsCanvas x:Name="cnvGame" removed="Green" GravityHorizontal="0" GravityVertical="0" DebugMode="False"  Width="1366" Height="768" MousePickEnabled="true">

                <local:ucBlock Canvas.Left="150" Canvas.Top="10" />


Что я уже пробовал:

Я попытался отследить неисправность с помощью точек останова и пришел к ошибке, описанной выше.

Sergey Alexandrovich Kryukov

Непонятный. Термин фокус связан только с фокусом клавиатуры. Нет никакого другого "фокуса", нет ничего непосредственно связанного с щелчком мыши. Щелчок может вызвать или не вызвать фокусировку. Вы обрабатываете события клавиатуры только для текущих элементов управления фокусировкой. Если вы этого не хотите, вам придется либо отключить фокусировку, либо обрабатывать события клавиатуры "предварительного просмотра". Это означает, что перенаправленное событие обрабатывается на своем пути в туннелирование стратегия маршрутизации, когда она отправляется самому верхнему родительскому элементу (например, Вашей странице), а не дочернему, который в конечном итоге завершает обработку событий.
—СА

petter2012

Да, спасибо, вот что происходит:

Во-первых, страница имеет (вероятно) фокус, и когда я нажимаю клавиши клавиатуры (Стрелка вверх, например, для того, чтобы игрок поднялся), она работает нормально.
Затем я щелкаю мышью где-то в окне игры.
Теперь ключи больше не работают. Я надеюсь, что это яснее.

Вот почему я попробовал это.Код доступа к ключу. Я попробовал Пейдж.KeyPreview = True, но KeyPreview, похоже, недоступен в UWP (?).

0 Ответов