gpt4 book ai didi

WPF ControlTemplate 部分替换

转载 作者:行者123 更新时间:2023-12-04 08:00:34 24 4
gpt4 key购买 nike

假设我们有一个非常“长 XAML”ControlTemplate对于我们的Control .
我们想要只需在模板中添加 1 个按钮 .
MSDN 声称“没有办法只替换控件的可视化树的一部分”。
我真的必须复制所有 ControlTemplate 并将我的 Button 添加到其中吗?

或者:是否有可能为特定元素提供某种接口(interface)?例如一个 TextBox,这样每个人都可以轻松地对其进行模板化,而无需重复整个 ControlTemplate。

谢谢 !

最佳答案

正如 qntmfred 所说,您不能直接执行此操作。但是,如果您拥有要自定义的控件(听起来像您这样做),那么您可以通过添加合适的自定义属性来做到这一点,例如 CustomButtons 属性(控件的每个用户都可以将自己的按钮添加到) 或 ExtensionContent 属性(控件的每个用户都可以将其设置为他们想要的任何内容——将其留空、添加单个控件或添加一个面板,其中包含他们想要的任意数量的内容)。您的 ControlTemplate 不会为这些属性分配任何语义,而只是按照赋予它们的方式托管它们。例如,假设您提供了 ExtensionContent 属性。您的 ControlTemplate 可以使用 ContentPresenter 呈现此内容:

<ContentPresenter ContentSource="ExtensionContent" />

您的用户可以将他们想要的任何内容放入其中:
<s:StefansControl>
<s:StefansControl.ExtensionContent>
<StackPanel Orientation="Horizontal">
<TextBlock Text="I'm custom content" />
<Button Click="DoSomethingSurprising_Click">Click me</Button>
<Image Source="something.jpg" />
</StackPanel>
</s:StefansControl.ExtensionContent>
</s:StefansControl>

另一种可能是提供您应用于控件部分的样式属性,以便用户可以设置它们的样式(包括更改控件的该部分(仅)的模板),而无需替换整个样式/模板。这是您的“特定元素的接口(interface)”的想法,例如提供应用于“foo”文本框的 FooBoxStyle 属性。

简而言之,这个想法是在基本模板中构建一定程度的“部分可替换性”——无论是通过使用内容、样式、模板还是这些的组合。 WPF 不提供“部分替换”的一般概念,但您可以提供自己的部分可替换性的特定概念,前提是您可以预测可能需要哪种类型的部分替换。

关于WPF ControlTemplate 部分替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147652/

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