2010-08-09 52 views
0

我有一個ItemsControl中的超鏈接列表,我希望用戶能夠在超鏈接有焦點時按下空格鍵來調用超鏈接的命令(目前按下enter鍵也可以做到這一點 - 但它不是那麼可發現的IMO) 。這是我的ItemsControl decl:如何讓WPF ItemsControl項目在按空格鍵時觸發命令?

<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處理程序,它工作得很好。 – 2010-08-10 16:31:47

1

我看到的最簡單的方法是構建一個簡單的自定義控件,它封裝了您想要調用的邏輯。 「輸入」按鈕的功能是超鏈接的默認命令調用,並且很難更改此設置。

只需構建一個從TextBlock繼承的自定義控件。它的樣式包含超鏈接的文本塊。使用TemplateBinding將DisplayName和TemplateBinding的TextProperty添加到自定義控件中的新命令依賴項屬性。還要在自定義控件的公共構造函數中註冊一個預覽按鍵向下事件,在該構造函數中檢查您的預期調用鍵(空格,回車等),並在按下的鍵適合您的期望時調用該命令。

Jan