WPF自定义控件不能直接取内容
WPF Custom Control can not take direct content
我的自定义控件不能直接放任何内容,看看:
<Style TargetType="local:MyCustomControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyCustomControl">
<Grid>
<Viewport3D />
<!-- the viewport is working (proof provided) -->
<!-- both borders are needed -->
<Border>
<Border>
<ContentPresenter />
</Border>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
class派生自Control,在静态构造函数中设置DefaultStyleKeyProperty.OverrideMetadata
。
当我尝试使用 MyCustomControl 时:
<local:MyCustomControl VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<TextBlock Margin="10,0,0,0" FontSize="16" Text="some test value" />
</local:MyCustomControl>
显示此错误消息:
Cannot add content to object of type MyCustomControl
MyNamespace.MyCustomControl
可能是什么问题? Contentpresenter 有问题吗?
我认为你应该将你的内容绑定到你的 Presenter
<ContentPresenter Content="{TemplateBinding Content}"/>
感谢 ZerO,这是一个很好的提示:
MyCustomControl 派生自 Control - 现在它派生自 ContenControl。
更改基础后 class 我现在可以按照 ZerO 的建议进行绑定。
<ContentPresenter Content="{TemplateBinding Content}"/>
问题已解决!
我的自定义控件不能直接放任何内容,看看:
<Style TargetType="local:MyCustomControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyCustomControl">
<Grid>
<Viewport3D />
<!-- the viewport is working (proof provided) -->
<!-- both borders are needed -->
<Border>
<Border>
<ContentPresenter />
</Border>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
class派生自Control,在静态构造函数中设置DefaultStyleKeyProperty.OverrideMetadata
。
当我尝试使用 MyCustomControl 时:
<local:MyCustomControl VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<TextBlock Margin="10,0,0,0" FontSize="16" Text="some test value" />
</local:MyCustomControl>
显示此错误消息:
Cannot add content to object of type MyCustomControl MyNamespace.MyCustomControl
可能是什么问题? Contentpresenter 有问题吗?
我认为你应该将你的内容绑定到你的 Presenter
<ContentPresenter Content="{TemplateBinding Content}"/>
感谢 ZerO,这是一个很好的提示:
MyCustomControl 派生自 Control - 现在它派生自 ContenControl。 更改基础后 class 我现在可以按照 ZerO 的建议进行绑定。
<ContentPresenter Content="{TemplateBinding Content}"/>
问题已解决!