2009-12-23 8 views
0

J'ai un TabControl avec deux TabItem s et un ListBox commun aux deux onglets. Ce ListBox doit être aligné dans le contenu spécifique de l'onglet. Par conséquent, je ne le place pas en dehors des onglets. J'ai un autre ListBox sur l'un des onglets. Lorsque je sélectionne un élément dans la seconde ListBox, la première ListBoxSelectedItem devient bleue, donc j'ai 2 ListBox es showen comme le contrôle ciblé à la fois.L'élément sélectionné d'une zone de liste créée dynamiquement devient bleu lorsque la sélection d'une autre zone de liste est modifiée

Y a-t-il une solution de contournement pour ce bogue WPF? Voici une capture d'écran et le code:

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> 

Répondre

1

Salut le problème est que les commandes de votre onglet événement sélectionné se déclenche lorsque vous cliquez sur la zone de liste commune, qui apporte dans le cas de la zone de liste a l'accent dans l'autre onglet. Ce n'est pas vraiment un bug. Il fait exactement ce que vous lui avez dit de faire.

Changer votre code dans votre gestionnaire d'événements à:

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); 
} 

qui arrêtera le comportement indésirable ciblé que vous voyez.