我有一个名为myControl的UserControl,其中有一个3列Grid。
<Grid Name="main">
<Grid Grid.Column="0"/><Grid Grid.Column="1"/><Grid Grid.Column="2"/>
</Grid>
客户端可以这样使用它,没关系。
<myControl />
我的问题是,客户想要将一个元素添加到“主”网格的第一列,如:
<myControl>
<TextBlock Text="abc"/>
</myControl>
在这种情况下,TextBlock将替换原始内容,这里是“主”网格。
我应该怎么做才能支持额外的元素?非常感谢。
答案 0 :(得分:2)
您可以使用以下内容:
// This allows "UserContent" property to be set when no property is specified
// Example: <UserControl1><TextBlock>Some Text</TextBlock></UserControl1>
// TextBlock goes into "UserContent"
[ContentProperty("UserContent")]
public partial class UserControl1 : UserControl
{
// Stores default content
private Object defaultContent;
// Used to store content supplied by user
private Object _userContent;
public Object UserContent
{
get { return _userContent; }
set
{
_userContent = value;
UpdateUserContent();
}
}
private void UpdateUserContent()
{
// If defaultContent is not set, backup the default content into it
// (will be set the very first time this method is called)
if (defaultContent == null)
{
defaultContent = Content;
}
// If there is something in UserContent, set it to Content
if (UserContent != null)
{
Content = UserContent;
}
else // Otherwise load default content back
{
Content = defaultContent;
}
}
public UserControl1()
{
InitializeComponent();
}
}