1

myControl という名前の UserControl があり、その中に 3 列のグリッドがあります。

<Grid Name="main">
  <Grid Grid.Column="0"/><Grid Grid.Column="1"/><Grid Grid.Column="2"/>
</Grid>

クライアントはこの方法で使用でき、問題ありません。

<myControl />

私の問題は、クライアントが要素を「メイン」グリッドの最初の列に追加したいということです。

<myControl>
  <TextBlock Text="abc"/>
</myControl>

この場合、TextBlock は元のコンテンツを置き換えます。ここでは、それが「メイン」グリッドです。

追加要素をサポートするにはどうすればよいですか? まことにありがとうございます。

4

1 に答える 1

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();
    }
}
于 2012-05-26T15:29:03.980 に答える