2009-12-23 16 views
0

我有一個TabControl,其中兩個TabItemListBox這兩個選項卡是通用的。此ListBox需要在選項卡特定內容內對齊。因此我不把它放在標籤外面。我在另一個選項卡上有另一個ListBox。當我在第二個ListBox中選擇一個項目時,第一個ListBoxSelectedItem變爲藍色,所以我有一次顯示爲聚焦控制。當另一個列表框的選擇發生變化時,動態創建的列表框的選定項目變爲藍色

是否有解決此WPF錯誤的方法?下面是截圖和代碼:

alt text http://img85.imageshack.us/img85/871/2focusedcontrols.png

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

namespace WpfApplication3 
{ 
    partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 

     void TabControl_SelectionChanged(
      object sender, SelectionChangedEventArgs e) 
     { 
      var parent = listBox.Parent as Panel; 
      parent.Children.Remove(listBox); 
      var panel = tabControl.SelectedIndex == 0 ? panel1 : panel2; 
      panel.Children.Add(listBox); 
     } 
    } 
} 

<Window x:Class="WpfApplication3.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" Height="300" Width="300"> 
    <TabControl Name="tabControl" 
       SelectionChanged="TabControl_SelectionChanged"> 
     <TabItem Header="tab1"> 
      <StackPanel Name="panel1"> 
       <ListBox> 
        <ListBoxItem>click me second</ListBoxItem> 
        <ListBoxItem>item</ListBoxItem> 
       </ListBox> 
       <ListBox Name="listBox"> 
        <ListBoxItem>click me first</ListBoxItem> 
        <ListBoxItem>item</ListBoxItem> 
       </ListBox> 
      </StackPanel> 
     </TabItem> 
     <TabItem Header="tab2"> 
      <StackPanel Name="panel2"/> 
     </TabItem> 
    </TabControl> 
</Window> 

回答

1

嗨的問題是,選擇事件的標籤控件,當你點擊共享列表框,這使在列表框中的情況下就會觸發在另一個選項卡中有焦點。其實並不是一個錯誤。它正在按照你所說的去做。

在事件處理更改您的代碼:

if (e.Source is TabControl) 
{ 
    var parent = listBox.Parent as Panel; 
    parent.Children.Remove(listBox); 
    var panel = tabControl.SelectedIndex == 0 ? panel1 : panel2; 
    panel.Children.Add(listBox); 
} 

這將阻止你看到不良行爲重點。

相關問題