Желание WPF TabItem привязывается только к случаю, когда IsSelected True - PullRequest
0 голосов
/ 21 сентября 2011

Содержимое одного TabItem является большим процессором, дорогим для создания. Хотел бы получать содержимое только через привязку для TabItem, когда IsSelected = True. Или получить альтернативный контент на основе IsSelected True или False. Отказ от IsAsync = True в этом случае не вариант.

XAML, приведенный ниже, работает, но извлекает содержимое независимо от того, IsSeleted = False или IsSelected = True.

    <TabItem IsSelected="False"  Header="Expensive Content">
        <FlowDocumentReader Name="FlowDocumentPageViewer1" HorizontalAlignment="Stretch" DataContext="{Binding Source={x:Static Application.Current}}">
            <FlowDocumentReader.Document>
                    <Binding Path="MyGabeLib.Search.SelectedDoc.XAMLdocFlowDocument" IsAsync="True" Converter="{StaticResource flowDocumentToXamlConverter}" 
                        FallbackValue="{StaticResource DefaultFlowDoc}" Mode="OneWay"/>
            </FlowDocumentReader.Document>                                         
         </FlowDocumentReader>
    </TabItem>

Преобразователь должен преобразовать строку (сериализованную с использованием XamlWriter.Save (DocFlowDocument)) обратно в FlowDocument, поскольку не может использовать IsAsync = True (напрямую) с FlowDocument.

Привязка к свойству в коде для перенаправления не работает, поскольку пользовательский интерфейс с IsAcync = True находится в другом потоке и не имеет доступа к IsSelected.

Хотел использовать шаблон с триггером, но это насколько я понял. Не очень далеко, но это не вызывает синтаксическую ошибку.

    <TabItem IsSelected="False" Name="TabItemFlowDoc">        
        <FlowDocumentReader ...>
            <FlowDocumentReader.Template>
                <ControlTemplate>            
                </ControlTemplate>    
            </FlowDocumentReader.Template>
         </FlowDocumentReader>

Попробовал триггер прямо на TabControl и даже не смог пройти мимо синтаксических ошибок

    <TabControl Grid.Row="0" Grid.Column="0" Name="TabControlView">
        <TabControl.Resources>
            <DataTemplate>
                <FlowDocumentReader.Template>                   
                </FlowDocumentReader.Template>
            </DataTemplate>
        </TabControl.Resources>

Заранее спасибо.

1 Ответ

0 голосов
/ 28 февраля 2012

Итак, в итоге я получил текст документа и другой параметр для его разметки в фоновом потоке.Затем в потоке пользовательского интерфейса я проверяю TabIndex, если эта вкладка выбрана, и создаю FlowDocument, только если эта вкладка выбрана.На другой вкладке представлены первые 4 тысячи символов текста, чтобы пользователь мог быстро решить, хотят ли они отобразить полностью выделенные документы.

...