Полосы прокрутки в закладке WPF - PullRequest
1 голос
/ 09 февраля 2012


У меня есть элемент управления вкладками, у которого есть полный набор закрываемых элементов вкладок, у каждого элемента вкладки есть «Вид» с разделом с возможностью прокрутки (каждый вид - это не один и тот же экземпляр), проблема в том, что если прокрутите на одной вкладке его каскады до всех остальных вкладок, я бродил, если кто-нибудь может сказать мне, как я могу предотвратить это?
Спасибо всем :)

1 Ответ

2 голосов
/ 09 февраля 2012

Это поведение по умолчанию, если ваши TabControl задают ContentTemplate .TabControls используют виртуализацию, поэтому они будут повторно использовать шаблон при переключении вкладок вместо создания новой каждый раз.

Это означает, что один и тот же ScrollViewer используется независимо от того, на какой вкладке вы находитесь. Вы можете доказать это, добавив событие Loaded к вашему ScrollViewer, и вы увидите, что оно вызывается только один раз.

Одним из способов решения этой проблемы является использование DataTemplate с x:Shared="False", поэтому он не будет совместно использовать шаблон. Я не проверял, есть ли какие-либо проблемы с производительностью с этим.

<DataTemplate x:Key="TestTemplate" x:Shared="False">
    <local:UserControl1 />
</DataTemplate>

<Style x:Key="TabItemStyle" TargetType="{x:Type TabItem}">
    <Setter Property="Header" Value="Test" />
    <Setter Property="ContentTemplate" Value="{StaticResource TestTemplate}" />
</Style>

...

<TabControl ItemsSource="{Binding SomeCollection}"
            ItemContainerStyle="{StaticResource TabItemStyle}" />

Обратите внимание, что это выглядит очень суетливо ... например, мне нужно поместить ScrollViewer в UserControl, иначе он не будет работать. Мне также нужно установить TabItem.ContentTemplate вместо TabControl.ContentTemplate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...