Как получить элемент WPF ItemsControl для запуска команды при нажатии пробела? - PullRequest
0 голосов
/ 10 августа 2010

У меня есть список гиперссылок в ItemsControl, и я бы хотел, чтобы пользователь мог нажимать клавишу пробела, чтобы вызвать команду гиперссылки, когда гиперссылка имеет фокус (в настоящее время нажатие клавиши ввода также делает это - но это не так, чтобы обнаружить IMO ). Вот мой ItemsControl decl:

    <ItemsControl x:Uid="_commandsItemsControl" Name="_commandsItemsControl" Grid.Row="1" Grid.Column="2" Grid.RowSpan="4" ItemsSource="{Binding Commands}" Background="Transparent"
                  ScrollViewer.CanContentScroll="False" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden"
                  HorizontalAlignment="Stretch" HorizontalContentAlignment="Right" VerticalAlignment="Bottom" Margin="12,0,12,0" BorderThickness="0">
        <ItemsControl.ItemTemplate>
            <DataTemplate x:Uid="DataTemplate_1">
                <TextBlock x:Uid="TextBlock_1" HorizontalAlignment="Stretch" TextAlignment="Right">
                    <Hyperlink x:Uid="Hyperlink_1" Command="{Binding Command}">
                        <Hyperlink.Inlines>
                            <Run x:Uid="Run_1" Text="{Binding DisplayName, Mode=OneWay}"/>
                        </Hyperlink.Inlines>
                    </Hyperlink>
                </TextBlock>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

Какой лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 10 августа 2010

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

1 голос
/ 10 августа 2010

Самый простой способ, который я вижу, это создать простой пользовательский элемент управления, который инкапсулирует логику, которую вы хотели бы вызвать. Функциональность кнопки Enter является вызовом команды по умолчанию для гиперссылки, и изменить это нелегко.

Просто создайте пользовательский элемент управления, который наследуется от TextBlock. Это стиль содержит текстовый блок с гиперссылкой. Используйте TemplateBinding для TextProperty для DisplayName и TemplateBinding для нового свойства зависимости команды в вашем пользовательском элементе управления. Также зарегистрируйте событие предварительного просмотра клавиши down в общедоступном конструкторе вашего пользовательского элемента управления, в котором вы проверяете наличие предполагаемых клавиш вызова (пробел, ввод и т. Д.) И вызываете команду, если нажатая клавиша соответствует вашим желаниям.

Jan

...