gpt4 book ai didi

wpf - 将 Canvas 设置为控件模板?

转载 作者:行者123 更新时间:2023-12-04 19:40:23 25 4
gpt4 key购买 nike

我在 ResourceDictionary xaml 文件中有一个 Canvas,如下所示:

<Canvas x:Key="Icon">
<Path ... />
<Path ... />
</Canvas>

在我的代码隐藏中,我使用

加载此图标
LayoutGrid.Children.Add(FindResource("Icon") as Canvas);

这很好用。现在我想创建一个使用与模板相同的图标的按钮。于是我创建了一个控件模板:

<ControlTemplate x:Key="IconTemplate">
...
</ControlTemplate>

现在的问题是:如何将“图标”资源 Canvas 放入控件模板中?据我所知,Canvas 没有 Style 或 Template 属性。它有一个 Children 属性,但不能通过 XAML 访问它。我将如何在模板中使用我的 Canvas ?

最佳答案

当您创建诸如 Canvas 之类的类型作为资源时,您正在创建该类型的 ONE 实例。这意味着您不能将该资源放置在应用程序中的多个位置(一个元素一次只能位于一个位置)。我认为你应该考虑使用控制模板。

您不需要任何代码。

类似这样的:

<ControlTemplate x:Key="Icon">
<Canvas>
<Path ... />
<Path ... />
</Canvas>
</ControlTemplate>

然后你在其他地方做这样的事情:

<Button>
<Control Template="{StaticResource Icon}" />
</Button>

这会构建一个常规外观的按钮,其中包含您的图标作为其内容。该按钮的内容就是您的图标。

但是,如果您想完全重新定义按钮的模板,那么您应该这样做

<ControlTemplate x:Key="Icon" TargetType="Button">
<Canvas>
<Path ... />
<Path ... />
</Canvas>
</ControlTemplate>

然后你在其他地方做这样的事情:

<Button Template="{StaticResource Icon}" />

请注意,这不是一个很好的按钮样式。看this example from Microsoft有关功能更全面的按钮模板的示例。

编辑

除非您的 ControlTemplate 中有 ContentPresenter,否则无需将模板分配给内容控件。请注意,任何从 Control 派生的类都可以被模板化,包括 Control 本身。因此,为了将项目放入您的 View 中,您可以使用:

<Control Template="{StaticResource Icon}" />

这使用层次结构中适用范围最广的类型,也是最轻的。

关于wpf - 将 Canvas 设置为控件模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com