我有一个非常大的 ControlTemplate(200 多行),里面有很多嵌套的控件。我需要通过对这些嵌套控件之一(复选框的可见性)进行小的更改来重用此模板。显然,我不想复制粘贴到新的 ControlTemplate 中并进行更改,因为我会将代码库加倍,如果我对模板进行常见更改,我将需要同时更改两者。
我想到了三个似乎可行的解决方案,但我对 XAML 了解不够(尤其是重构 XAML 以了解这些是否可行)
<Checkbox Visibility={Binding someNewPropertyOfTheTemplate}/>
(这是 TemplateBinding 的用途吗?) 这些想法中的任何一个都有效吗?如果是这样,哪个最合适? (如果不是 - 正确的方法是什么?)
我将 VS2010 与 .Net 4.0 一起使用。
最佳答案
我会去#3。但是你的代码不太正确。如果你想绑定(bind)到实际控件的属性,在哪个模板上应用,你应该使用 TemplateBinding
。假设您有一个带有属性 ShowCheckboxes
的自定义控件。然后在你的模板中你应该使用
<Checkbox Visibility={TemplateBinding ShowCheckboxes,
Converter={StaticResource BooleanToVisibilityConverter}}/>
请注意,您可能需要引用或创建适当的转换器。
另一方面,如果您使用 MVVM,您可以在 viewmodel 类上定义您的控件属性。那么你应该使用
{Binding}
。此外,还有另一种方法来控制应用哪些模板。
您可以从大模板中提取子控件的模板。并复制它,这样你就有了两个模板,它们在你需要的方式上有所不同。
然后,在主模板中,您可以将子控件的
TemplateSelector
设置为您将实现的自定义类。查看 http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx 以获取更多示例。关于wpf - 覆盖 ControlTemplate 中的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8308910/