微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 FlowDOcument.xaml 引用到 WPF XAML 中并通过 ComboBox 更改参考文档

如何解决将 FlowDOcument.xaml 引用到 WPF XAML 中并通过 ComboBox 更改参考文档

我有一个 viewmodel-First MVVM WPF 项目。 我想根据选择了 ComboBox 中的哪个选项加载不同的 FlowDocument.xaml 文件

这是我迄今为止尝试过的:

在我的 XAML 视图中,我添加了以下内容

<UserControl.Resources>
    <ResourceDictionary x:Key="ColebrookWhiteEquation">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Views\FlowDocuments\ColebrookWhiteEquation.xaml"></ResourceDictionary>
            <ResourceDictionary Source="Views\FlowDocuments\ManningEquation.xaml"></ResourceDictionary>            
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

我的其中一个 FlowDocument 的缩减示例如下:

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:local="clr-namespace:Drain.Views.FlowDocuments"
          xmlns:controls="clr-namespace:WpfMath.Controls;assembly=WpfMath"
          ColumnWidth="400" FontSize="14" FontFamily="Georgia">
    <Paragraph FontFamily="Calibri" FontWeight="Bold" FontSize="24">
        Colebrook White Equation
    </Paragraph>
    ...

我的第一个问题是找不到 ResourceDictionary(例如“Views\FlowDocuments\ColebrookWhiteEquation.xaml”)。尽管 FlowDocument xaml 文件始终设置为资源和复制。我还可以确认文件在构建后复制到了正确的位置。

然后我计划添加一系列 FlowDocumentPageViewer 标签,但这给我一个错误,即 ColebrookWhiteEquation 是一种不兼容的文件类型。这可能是由于上述问题。有人可以确认吗?这是它的 XAML。

<FlowDocumentPageViewer Document="{StaticResource ColebrookWhiteEquation}"></FlowDocumentPageViewer>

如果我可以完成上述工作,我计划将以下内容添加到每个 FlowDocumentPageViewer

    <Style targettype="FlowDocumentPageViewer ">
        <Setter Property="Visibility" Value="Visible"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding SelectedFlowEquationType.ID}" Value="1">
                <Setter Property="Visibility"  Value="Collapsed"/>
            </DataTrigger>
         </Style.Triggers>
     </Style>

就我所见,上述解决方案的唯一问题是它确实意味着加载所有 FlowDocument,无论是否需要它们。如果 FlowDocument 的数量很少,我认为这不会成为问题。

如果有更简单的 MVVM 方法,我将不胜感激。

解决方法

ColebrookWhiteEquation.xaml 应该包含一个 ResourceDictionary 根元素,该根元素又包含一个带有 FlowDocumentx:Key 资源,例如:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <FlowDocument x:Key="doc"
          ColumnWidth="400" FontSize="14" FontFamily="Georgia">
        <Paragraph FontFamily="Calibri" FontWeight="Bold" FontSize="24">
            Colebrook White Equation
        </Paragraph>
    </FlowDocument>
</ResourceDictionary>

只有这样,您才能像这样直接在 XAML 标记中引用 FlowDocument 资源

<FlowDocumentPageViewer Document="{StaticResource doc}" />

所以引用的 XAML 文件应该是资源字典,其中的资源应该是 FlowDocuments

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?