以下代码
<local:UserControl1>
<Button>Click me</Button>
</local:UserControl1>
意味着您将UserControl1
's Content 属性设置为该按钮。这个按钮只是替换了那个UserControls1
标记。因此,您在 UserControl1.xaml 中拥有的所有内容都不再存在。
编辑
如果您希望您的 UserControl 托管一些将在其外部设置的标记,您可以向其中添加一个DependencyProperty
,例如:
/// <summary>
/// Gets or sets additional content for the UserControl
/// </summary>
public object AdditionalContent
{
get { return (object)GetValue(AdditionalContentProperty); }
set { SetValue(AdditionalContentProperty, value); }
}
public static readonly DependencyProperty AdditionalContentProperty =
DependencyProperty.Register("AdditionalContent", typeof(object), typeof(UserControl1),
new PropertyMetadata(null));
并在它的标记中添加一些元素来承载额外的内容。这是扩展您提供的标记的示例:
<UserControl ... Name="userControl">
<Grid Background="LightBlue">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="Title" FontSize="30" Margin="10,0,0,0"/>
<ContentPresenter Content="{Binding AdditionalContent, ElementName=userControl}" />
</Grid>
</UserControl>
现在您可以按如下方式使用它:
<local:UserControl1>
<local:UserControl1.AdditionalContent>
<Button>Click me</Button>
</local:UserControl1.AdditionalContent>
</local:UserControl1>