1

我有嵌套的自定义 ContentControls,我很难让内部控件在外部控件内部呈现。这是两个控件如何组成的示例:

<Window ...>
    <StackPanel>
        <local:Outer> <!-- Nothing in here gets displayed -->
            <local:Inner>
                <TextBlock>Fahrvergnügen</TextBlock>
            </local:Inner>
        </local:Outer>
        <local:Inner> <!-- This is displayed just fine -->
            <TextBlock>some text</TextBlock>
        </local:Inner>
    </StackPanel>
</Window>

内部和外部的样式定义如下:

<ResourceDictionary ...>

    <Style TargetType="{x:Type local:Outer}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:Outer}">
                    <ContentPresenter />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{x:Type local:Inner}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:Inner}">
                    <ContentPresenter />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</ResourceDictionary>

另一个问题是 Outer 使用了指向 List 的 ContentPropertyAttribute:

[ContentPropertyAttribute("InnerItems")]
public class Outer : ContentControl
{
    private List<Inner> innerItems = new List<Inner>();

    static Outer()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(Outer), new FrameworkPropertyMetadata(typeof(Outer)));
    }

    public List<Inner> InnerItems { get { return this.innerItems; } }
}

为了完整起见,这是 Inner 的定义,这是微不足道的:

public class Inner : ContentControl
{
    static Inner()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(Inner), new FrameworkPropertyMetadata(typeof(Inner)));
    }
}

我猜问题是 Outer 的内容不能用简单的方式显示,<ContentPresenter />但我不确定用什么替换它。建议?

4

0 回答 0