将 FlowDOcument.xaml 引用到 WPF XAML 中并通过 ComboBox 更改引用文档
Referencing a FlowDOcument.xaml into the WPF XAML and change reference documents via ComboBox
我有一个 ViewModel-First MVVM WPF 项目。
我想加载不同的 FlowDocument.xaml 文件,具体取决于选择了 ComboBox 中的哪个选项。
这是我目前尝试过的方法:
在我的 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>
我的一个FlowDocuments的缩减示例如下:
<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 文件始终设置为 Resource 和 Copy。我还可以确认文件正在构建后复制到正确的位置。
然后我计划添加一系列 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>
据我所知,上述解决方案的唯一问题是它确实意味着加载所有 FlowDocuments 而不管它们是否需要。如果 FlowDocuments 的数量很少,我认为这不会成为问题。
如果有更简单的 MVVM 方法,我将不胜感激。
ColebrookWhiteEquation.xaml
应该包含一个 ResourceDictionary
根元素,该根元素又包含一个 FlowDocument
资源和一个 x: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
.
我有一个 ViewModel-First MVVM WPF 项目。 我想加载不同的 FlowDocument.xaml 文件,具体取决于选择了 ComboBox 中的哪个选项。
这是我目前尝试过的方法:
在我的 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>
我的一个FlowDocuments的缩减示例如下:
<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 文件始终设置为 Resource 和 Copy。我还可以确认文件正在构建后复制到正确的位置。
然后我计划添加一系列 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>
据我所知,上述解决方案的唯一问题是它确实意味着加载所有 FlowDocuments 而不管它们是否需要。如果 FlowDocuments 的数量很少,我认为这不会成为问题。
如果有更简单的 MVVM 方法,我将不胜感激。
ColebrookWhiteEquation.xaml
应该包含一个 ResourceDictionary
根元素,该根元素又包含一个 FlowDocument
资源和一个 x: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
.