有没有简单的方法来包含 xaml 代码块?

Is there an easy way to include chunks of xaml code?

编码 xaml 时,我们拥有出色的资源字典、样式、用户控件和模板化控件,使 xaml 可扩展且易于重用。

但是如何在多个地方包含相同的 xaml 代码块呢?

让我给一个examle。

我有一个要在所有 xaml 页面上使用的网格定义。

<!--Row definitions-->
<Grid.RowDefinitions>
    <RowDefinition Height="50" />
    <RowDefinition Height="Auto" />
    <RowDefinition />
</Grid.RowDefinitions>

就像现在一样,我只是将这个定义复制粘贴到我所有的 xaml 页面上。可以想象,即使是对网格定义添加最简单的更改也会变成一场噩梦。它不是干代码。

那么,还有更聪明的选择吗?就像在单独的 xaml 文件中定义块,然后编写类似

的内容
<includes:GridDefinitions>

在 PHP 中,您可以获得 Twig and Blade 等模板工具,您可以在其中编写主模板,然后对其进行扩展(下面的示例来自 twig)

base.html.twig

{% block content %}

{% endblock %}

page.html.twig*

{% extends "base.html" %}

{% block content %}
    Content of the page...
{% endblock %}

他们甚至有一个 include 语句,它简单地获取一个 html 文件的所有内容,并将其包含在您放置标签的任何地方

{{ include('page.html') }}

那么问题来了

xaml 是否有某种模板引擎或包含我还不知道的功能?或者有没有办法利用资源字典等,达到类似DRY代码的效果?

如果我要查找的内容不清楚,请随时 post 发表评论并询问更多信息。

根据我的经验,您的问题没有直接答案,但您可以考虑以下一些选项:

  1. 对于 UI 的部分,stiles,... -- 如您在第一行中提到的,在单独的文件中定义 UserControls、字典、ContentConrols...。 (以防万一,如果你想要 "stylize" 像 RowDefinitions 这样的东西,你应该将它们包装到依赖对象中 - 这里是 a detailed article。)
  2. 对于类似的页面 -- 定义 Visual Studio 模板以生成预定义的 markup/files 等
  3. 对于类似的代码部分——定义code snippets - here is how-to for XAML。他们将在编码时工作。