我是使用ControlTemplate
的新手。我正在写我的第一个控件,但我(在我看来)是一个非常奇怪的问题。
我使TemplateBinding
工作的任何依赖项属性,但.NET框架对象中的任何属性,即Content
的{{1}}属性或ContentControl
属性<{1}}不会在运行时填充。
我确信我错过了什么......就是我不知道的......
代码示例如下:
此课程非常简单:
Items
模板是:
ItemsControl
基类public class Title : ContentControl
{
}
类是位于System.Windows.Controls.Control名称空间中的.NET类。
谢谢,
亚当
答案 0 :(得分:1)
我相信如果你想覆盖放置Content的位置,你可以使用ContentPresenter来做到这一点。
<Style TargetType="{x:Type UI:Title}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type UI:Title}">
<Label>
<ContentPresenter />
</Label>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
注意我也从TextBlock更改为Label,因为我认为TextBlock.Text属性不会接受来自ContentControl.Content的所有内容。以下是我按照预期工作的示例:
<Window x:Class="ContentControlTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ContentControlTest"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<Style TargetType="{x:Type local:Title}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Title}">
<Button>
<ContentPresenter />
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<local:Title>
<TextBlock Text="Happy Days!" />
</local:Title>
</Window>
答案 1 :(得分:0)
您可能需要在对象上实现INotifyPropertyChanged接口,并在集合上实现INotifyCollectionChanged。