WPF - 带内容的边框模板

时间:2014-09-04 13:03:19

标签: xml wpf xaml border contentcontrol

假设我有以下控制模板:

<ControlTemplate x:Key="Test">
    <Grid>
        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1" Width="33" Height="33" CornerRadius="3"/>
        <ContentControl Content="{TemplateBinding Property=ContentControl.Content}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
    </Grid>
</ControlTemplate>

如何在wpf中更改控件的内容?我尝试过像

这样的东西
<Control Template="{StaticResource Test}" BorderBrush="Black" Content="aa"></Control>

但是当我这样做时,我告诉我,财产内容无法识别或找不到。

2 个答案:

答案 0 :(得分:3)

您需要单独使用ContentControl来执行您想要的操作...要清楚,ContentControl元素与Control元素无关。它用于显示数据对象,并可选择将DataTemplate应用于对象。 DataTemplate是您可以自定义的部分:

<ContentControl Content="{Binding SomeDataObject}" 
    ContentTemplate="{StaticResource SomeDataObjectTemplate}" />

...

在某些Resources集合中:

<DataTemplate x:Key="SomeDataObjectTemplate" DataType="{x:Type Prefix:SomeDataObject}">
    <Grid>
        <Border BorderBrush="Black" BorderThickness="1" CornerRadius="3" />
        <TextBlock Text="{Binding}" />
    </Grid>
</DataTemplate>

您唯一的另一种选择是声明UserControl并将标记的某些部分公开为可以从控件外部进行数据绑定的DependencyProperty

<Prefix:YourUserControl CustomContent="{Binding SomeDataObject}" />

控件内部:

<ContentControl Content="{Binding CustomContent, 
    RelativeSource={RelativeSource AncestorType={x:Type Local:YourUserControl }}}" />

答案 1 :(得分:1)

由于Control不是从ContentControl派生的,因此它不会公开Content属性。请查看更多信息here