0

我有一个TabControl带有两个TabItems 和一个ListBox两个选项卡共有的 a 。这ListBox需要在选项卡特定内容内对齐。因此我不会将它放在选项卡之外。我ListBox在其中一个标签上有另一个。当我在 second 中选择一个项目时ListBox,第一个ListBox变成SelectedItem蓝色,所以我有 2 个ListBoxes 立即显示为焦点控件。

这个 WPF 错误有解决方法吗?这是屏幕截图和代码:

替代文字 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>
4

1 回答 1

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

这将阻止您看到的不受欢迎的集中行为。

于 2009-12-23T23:03:27.627 回答