【问题标题】:UWP: how to setup namespace for templated controlUWP:如何为模板化控件设置命名空间
【发布时间】:2021-01-27 17:32:58
【问题描述】:

我想创建一个模板化控件,并且对于我的“共享”项目,我使用了“添加新项”对话框来创建一个默认的模板化控件。这会构建,但当然,它还没有在我的项目中使用。

如何在我的主页中引用它?我看到很多示例,但没有一个可以找到,解释如何设置命名空间。

它创建了 Themes\Generic.xaml 和 TitlebarTemplate.cs(后者是我为模板选择的名称)。

这是我的 Generic.xaml:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UnoTest.Shared">

    <Style TargetType="local:TitlebarTemplate" >
      ...
    </Style>
</ResourceDictionary>

还有,这是一个非常简洁的主页:

<Page
  x:Class="UnoTest.ListPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="using:UnoTest"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  >

  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto"  />
      ...
    </Grid.RowDefinitions>

    ... put template here ...
  </Grid>
</Page>

我需要添加什么命名空间来引用模板?并且,请包括实际引用它的语法。

我正在为 Uno 平台执行此操作,但我认为语法与 UWP 相同。

编辑

我把这个放在我的页面上:

<ResourceDictionary>
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Themes/Generic.xaml" />
  </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

但我仍然找不到引用 TitlebarTemplate 的方法。

【问题讨论】:

  • 确实有必要像您一样在 Uno 中显式引用 Generic.xaml 字典(尽管它在 UWP 中自动完成)。但是,在那之后,它应该表现正确。您能否确认您当前的代码在 UWP 中正常工作?

标签: templates uwp uno-platform


【解决方案1】:

使用:

xmlns:dt="UnoTest.Themes"

应该足够了。这将是你的ProjectName.AnyDirectoryYouHave

您添加到共享库的任何xaml 文件都将采用全局命名空间(没有共享)。

注意事项:

我们通常将所有与Styles相关的文件保存在UWP head中,通过Controls将文件中的Styles分组。

然后将所有这些样式合并到位于App.xaml 文件中的应用程序字典中。

通过这样做,您将能够从应用程序中的任何页面访问您的Template 和任何其他Style,而无需导入它。

这意味着您可以使用通用资源字典并将其合并为应用程序字典的一部分,然后在您的页面中使用它。

希望这会有所帮助。-

【讨论】:

  • 试过了:我将 xmlns:themes="UnoTest.Themes" 添加到我的主页 xaml。然后,在下面我尝试引用模板,但似乎没有任何效果。我试过 都无法识别。
  • 我现在看得更清楚了。有几件事,一个位于自己文件中的ResourceDictionary 需要合并到应用程序字典或页面字典中,以便您可以使用它。您定义的样式将有一个Key,您稍后将使用它来引用它并使用Style={StaticResource YourKey} 之类的东西将其应用于控件。这是您应该让您的模板在页面中工作的方式。将更新答案以为您添加更多信息。 @PeriHartman
  • 另一个问题:TitlebarTemplate 是什么?你能用这个文件的内容更新问题吗,或者至少是全局定义?
  • TitlebarTemplate 是我在 Generic.xaml 中为模板化控件命名的名称。
  • Abut 合并字典:你的意思是把它放在 App.xaml 中吗?我想在页面之间共享控件,所以我认为我不应该将它放在我的页面字典之一中,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 2020-02-08
相关资源
最近更新 更多