2011-09-26 56 views
1

我有TextBox,它應始終處於焦點狀態。 同時我有列表框。 當用戶點擊此列表框中的某個項目時,點擊的項目將獲得焦點。在選擇列表框中的項目時將注意力集中在另一個控件上

我試圖設置Focusable =「false」對於我的列表框中的每個ListBoxItem,但是在這種情況下不能選擇任何項目。 我發現使用dotPeek下面的代碼:

private void HandleMouseButtonDown(MouseButton mouseButton) 
{ 
    if (!Selector.UiGetIsSelectable((DependencyObject) this) || !this.Focus()) 
    return; 
    ... 
} 

有什麼辦法來解決我的問題呢?

+0

你想選擇在列表框中的項目,但沒有亮點那件藍色的東西? –

+0

我希望能夠通過鼠標選擇列表框項目,但不會丟失對我的文本框的焦點。 – petka

+0

您可以在列表框的SelectionChanged事件中再次將焦點設置爲文本框。 –

回答

0

您可以在ListBoxItems上處理PreviewMouseDown並將事件標記爲Handled,這將停止傳輸的焦點。

您可以設置e.Handled = true,因爲MouseButtonEventArgs是RoutedEventArgs

該演示工程,以保持重心上文本框:

XAML

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Height="350" 
     Width="525"> 
    <StackPanel FocusManager.FocusedElement="{Binding ElementName=textBox}"> 
     <TextBox x:Name="textBox" /> 
     <ListBox x:Name="listBox"> 
      <ListBoxItem PreviewMouseDown="ListBoxItem_PreviewMouseDown">1</ListBoxItem> 
      <ListBoxItem PreviewMouseDown="ListBoxItem_PreviewMouseDown">2</ListBoxItem> 
      <ListBoxItem PreviewMouseDown="ListBoxItem_PreviewMouseDown">3</ListBoxItem> 
     </ListBox> 
    </StackPanel> 
</Window> 

代碼隱藏

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Input; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void ListBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e) 
     { 
      var item = sender as ListBoxItem; 
      if (item == null) return; 
      listBox.SelectedItem = item; 
      e.Handled = true; 
     } 
    } 
} 
相關問題