下面的代碼
<local:UserControl1>
<Button>Click me</Button>
</local:UserControl1>
表示您將UserControl1
的Content屬性設置爲該按鈕。這個按鈕只是取代UserControls1
的標記。因此,您在UserControl1.xaml中的所有內容都不再存在。
編輯
如果你希望你的用戶控件來承載一些標記,這將在什麼地方呢以外設置,你可以添加一個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(CalibrationPoint),
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>
爲什麼要使用額外的依賴項屬性,而不僅僅是替換控件模板並綁定到內容屬性? – codekaizen
我同意你的意見。在我發佈我的消息之後,我看到了你的回答。這是我投票你的 – EvAlex
爲什麼它不工作的解釋是偉大的,但我發現@ blindmeis的答案是更有幫助。 – TarkaDaal