Вопрос

Я пытался обработать событие нажатия клавиши UserControl (страница) в моем приложении Silverlight, но, похоже, наблюдается какое-то странное поведение со стороны функциональности пользовательского ввода Silverlight.Событие не будет поднято ни при каких обстоятельствах.Я даже пытался прикрепить обработчик событий к каждому элементу управления контейнером в UserControl, но по-прежнему безуспешно.Действительно, система "маршрутизации событий" пользовательского ввода Silverlight довольно нова и кажется мне довольно странной, так что, возможно, это просто недоразумение с моей стороны, хотя я довольно невежественен в том, как действовать дальше.

Следующий код является шаблоном конкретной страницы, с которой я тестирую.

<UserControl x:Class="MyNamespace.CreditsPage"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             KeyDown="UserControl_KeyDown">
    <Grid x:Name="LayoutRoot">
        <Border>
            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Vertical">
                <TextBlock TextAlignment="Center">
                A line of text.<LineBreak />
                <LineBreak />
                A line of text.<LineBreak />
                <LineBreak />
                A line of text.<LineBreak />
                <LineBreak />
                A line of text.<LineBreak />
                </TextBlock>
            </StackPanel>
        </Border>
    </Grid>
</UserControl>

В WPF очевидным решением такой проблемы была бы обработка события PreviewKeyDown, но, к сожалению, это недоступно в Silverlight 2.Приветствуются любые идеи (и краткое объяснение того, почему маршрутизация событий Silverlight работает именно так).

Это было полезно?

Решение

Вы можете управлять пользовательским вводом из основного пользовательского интерфейса :Приложение.Текущее.корневое изображение

Application.Current.RootVisual.KeyDown += Application_KeyDown

Затем вы можете обрабатывать в методе Application_KeyDown все пользовательские вводимые данные с клавиатуры.

Вы также можете ознакомиться с этим вопросом : Обработка события KeyDown в Canvas

Другие советы

Я попробовал xaml, который вы предоставили, и у меня не возникло проблем с передачей события KeyDown.

Одна вещь, которая могла бы быть причиной этого:плагин Silverlight будет видеть входные события только в том случае, если он сфокусирован.Поэтому попробуйте щелкнуть по содержимому Silverlight в браузере, чтобы сфокусировать его на вводе, прежде чем нажимать клавиши.

Дайте мне знать, решит ли это вашу проблему или нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top