假设我有以下控制模板:
<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>
但是当我这样做时,我告诉我,财产内容无法识别或找不到。
答案 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。