我正试着做这样的事...
<Style
x:Key="MyBorderStyle"
TargetType="Border">
<Setter
Property="Padding"
Value="{TemplateBinding Padding}" />
</Style>
...但我得到错误:
- "Padding"成员无效,因为它没有限定得类型名称. *
如何提供"限定类型名称"?
注意:我尝试这样做的原因是,我想在一系列类似的ControlTemplates中包含相同的Border。
我也试过这个:
<Setter
Property="Padding"
Value="{TemplateBinding GridViewColumnHeader.Padding}" />
......它实际上是编译的,但当我运行应用程序时,我得到了一个XamlParseException
:
- 无法将属性"Value"中的值转换为""类型的对象。*
我想也许用GridViewColumnHeader
(这是我想使用这种风格的ControlTemplate)来限定Padding
会起作用,但是没有。
- 编辑:**
根据TemplateBinding
的文档,它是这样写的:
将控件样板中的属性值链接为样板化控件上其他公开属性的值。
所以听起来我想做的事情是不可能的。我真的希望能够在我的控件模板中为某些控件创建可重用的样式,但是我想模板绑定不能包含在这些样式中。
3条答案
按热度按时间mfuanj7w1#
TemplateBinding
适用于模板化控件,并将该控件的属性值绑定到模板中其他控件的属性的情况。在您的情况下,您正在模板化某个对象(称为MyControl),该模板将包括边框,其填充应绑定到MyControl的填充。从MSDN documentation开始:
TemplateBinding是针对模板方案的绑定的优化形式,类似于使用{Binding RelativeSource={RelativeSource TemplatedParent}}构造的绑定。
但是无论出于什么原因,将
TemplatedParent
指定为绑定的源似乎在样式设置器中不起作用。要解决这个问题,您可以将相对父控件指定为正在模板化的控件的AncestorType(如果您没有在MyControl模板中嵌入其他MyControl,它将有效地找到TemplatedParent)。我在尝试自订Button控件的样板时,使用了这个方案,其中Button的(String)Content需要系结至按钮ControlTemplate中TextBlock的Text属性。程式码如下所示:
3j86kqsm2#
{TemplateBinding ...}
快捷键在Setter中不可用。但没有人会阻止您使用完整的详细版本,例如:
Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Padding}"
.r7knjye23#
只要在属性前面加上型别名称,就可以限定属性。例如,
Border.Padding
取代Padding
。但是,我不确定这对您的场景是否有意义。
TemplateBinding
在控件模板中使用。