Как привязать ресурс к потоку чтения документов из древовидной структуры только с помощью XAML?

На этот раз я работаю над мини-приложением окна справки (чтобы включить его в другой проект, приложение для редактирования изображений).

У меня есть сетка с двумя столбцами и разделителем сетки между ними. Слева у меня есть древовидная структура с несколькими узлами (заданными в XAML), а справа — средство чтения потокового документа.

У меня есть около 10 словарей ресурсов, в которых я храню свои документы, по одному для каждого узла, которые я хочу отобразить в своем потоке чтения документов. На самом деле я понятия не имею, как это связать! Кто-нибудь знает, как я могу это сделать? Мой код на данный момент (добавлен только один словарь ресурсов)

      <Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary x:Name="About"  Source="About.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="500"/>
    </Grid.ColumnDefinitions>
    <GridSplitter HorizontalAlignment="Right" 
              VerticalAlignment="Stretch" 
              Grid.Column="1" ResizeBehavior="PreviousAndNext" ResizeDirection="Columns"
              Width="5" Background="#FFBCBCBC"/>
    <TreeView Width="250" Grid.Column="0" FontFamily="Segoe UI" FontSize="16">
        <TreeViewItem Header="Help">
            <TreeViewItem Header="About the application"></TreeViewItem>
            <TreeViewItem Header="Getting started"></TreeViewItem>
            <TreeViewItem Header="Images from Flickr"></TreeViewItem>
            <TreeViewItem Header="Images from the computer"></TreeViewItem>
            <TreeViewItem Header="Images from the browser"></TreeViewItem>
            <TreeViewItem Header="Editing">
                <TreeViewItem Header="Open and Save"></TreeViewItem>
                <TreeViewItem Header="Uploading"></TreeViewItem>
                <TreeViewItem Header="Crop"></TreeViewItem>
                <TreeViewItem Header="Resize"></TreeViewItem>
                <TreeViewItem Header="Filters"></TreeViewItem>
                <TreeViewItem Header="Adding text"></TreeViewItem>
                <TreeViewItem Header="Remove red eyes"></TreeViewItem>
            </TreeViewItem>
        </TreeViewItem>
    </TreeView>
    <FlowDocumentReader Grid.Column="2" >

    </FlowDocumentReader>
</Grid>


person Iris Classon    schedule 20.12.2011    source источник


Ответы (1)


Вы можете использовать свойство Tag узлов, чтобы определить строковое значение для загрузки. Затем выполните привязку к тегу выбранного узла.

Если вы затем используете конвертер, вы можете загрузить содержимое документа из файла/res.Dict или из любого другого места:

  <TreeView x:Name="documentTreeView" Width="250" Grid.Column="0" FontFamily="Segoe UI" FontSize="16">
    <TreeViewItem Header="Help">
      <TreeViewItem 
         Header="About the application" 
         Tag="ResDict1.xaml"></TreeViewItem>

....

  <FlowDocumentReader Document="{Binding ElementName=documentTreeView, Path=SelectedItem.Tag, Converter={StaticResource stringToFlowDocumentConverter}}"  Grid.Column="2" />
person SvenG    schedule 20.12.2011