私は、項目のデータテンプレートにWindowsFormsHostを持つデータバインドTreeViewを持っています。 TreeViewの項目が増えるほど、WindowsFormsHostが多いほど、UIが遅くなります。WPF:なぜ複数のWindowsFormsHostでUIが低速になるのですか?
TreeViewはTabControl内にあり、TabControl自体がTabControl内にあります。この不安定さは、TabItemが選択されたとき(つまり、別のTabItemからTreeViewでTabItemに切り替えるとき)にはっきりと分かります。リストボックスの内容をスクロールし、ボタンをクリックした後
class Foo { public string Bar { get { return DateTime.Now.Ticks.ToString(); } } }
void Button_Click(object sender, RoutedEventArgs e)
{
if (lst.ItemsSource == null)
lst.ItemsSource = new ObservableCollection<Foo>();
for (int j = 0; j < 50; j++)
(lst.ItemsSource as IList<Foo>).Add(new Foo());
}
:フォームのコードでこれにより
<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">
<TabControl>
<TabItem Header="Tab 1">
<StackPanel>
<Button Content="Add 50 WindowsFormsHost controls"
Click="Button_Click" />
<ListBox Name="lst" Height="300">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Bar}" />
<WindowsFormsHost />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</TabItem>
<TabItem Header="Tab 2" />
</TabControl>
</Window>
:簡素化するために
、私の代わりにTreeViewコントロールのリストボックスでシンプルなアプリを作りました液体が少なくなり、タブ1に戻るときに遅れがあります。
何が起こっているのか、それについて何かがある場合のアイデアはありますか?