WPF - 带内容的边框模板

4
假设我有以下控件模板:
```html

让我们假设我有以下控件模板:

```
<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>

但是当我这样做时,它告诉我内容属性未被识别或未找到。

1
控件是一个基类,没有Content属性。 - Maximus
2个回答

5
你需要单独使用 ContentControl 来实现你想要的功能... 为了明确,ContentControl 元素与 Control 元素没有任何关系。它用于显示数据对象并可选择应用 DataTemplate 到该对象。 DataTemplate 是你可以自定义的部分:
<ContentControl Content="{Binding SomeDataObject}" 
    ContentTemplate="{StaticResource SomeDataObjectTemplate}" />

在一些资源集合中:

<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

由于 Control 不从 ContentControl 派生,因此它不公开 Content 属性。要了解更多信息,请查看此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接