0

私はTabControl2つTabItemのsとListBox両方のタブに共通のaを持っています。これListBoxは、タブ固有のコンテンツ内に配置する必要があります。したがって、タブの外側には配置しません。ListBoxタブの1つにもう1つあります。2番目の項目を選択するListBoxと、最初ListBoxの項目SelectedItemが青色になるためListBox、フォーカスされたコントロールとして一度に2つのesが表示されます。

この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 に答える