2010-08-09 2 views
0

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

<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

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

+0

Да, я пошел с обработчиком KeyUp на элементе Hyperlink, который работает очень хорошо. –

1

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

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

Jan