放置在ContentControl中时,Control的父级为null

时间:2010-06-22 12:05:04

标签: wpf silverlight contentcontrol transformtovisual

我有一个简单的控件派生自ContentControl,有3个属性。

当我尝试使用放在MainContent内的控件执行control.TransformToVisual()时出现问题。它总是会显示ArgumentNullException

我的猜测是由于控件具有null Parent属性。有没有一种简单的解决方法?

C#

public static readonly DependencyProperty LabelTextProperty =
    DependencyProperty.Register("LabelText", typeof(string), typeof(LabelledControl), null);

public static readonly DependencyProperty ValidationContentProperty =
    DependencyProperty.Register("ValidationContent", typeof(object), typeof(LabelledControl), null);

public static readonly DependencyProperty MainContentProperty =
    DependencyProperty.Register("MainContent", typeof(object), typeof(LabelledControl), null);

XAML

<Style TargetType="local:LabelledControl">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="local:LabelledControl">

            <StackPanel Margin="0 10 0 0">
                <StackPanel Orientation="Vertical">
                    <dataInput:Label Content="{TemplateBinding LabelText}" FontWeight="Bold" FontSize="12" IsTabStop="False"/>
                    <ContentControl Content="{TemplateBinding ValidationContent}" IsTabStop="False"/>
                </StackPanel>
                <ContentControl x:Name="_contentControl" Content="{TemplateBinding MainContent}" IsTabStop="False"/>
            </StackPanel>

        </ControlTemplate>
    </Setter.Value>
</Setter>
</Style>

1 个答案:

答案 0 :(得分:-1)

您是否尝试在ControlTemplate中使用ContentPresenter类而不是ContentControl类来在模板中显示这些属性?我不确定它是否与您的ArgumentNullException相关,但通常ContentControl的内容通过ContentPresenter在模板上公开。

由于您的控件派生自ContentControlContentPresenter将自动将Content和ContentTemplate属性绑定到Content属性设置的任何内容。您还可以手动将ContentPresenter的Content属性绑定到ValidationContent属性。

我不确定当基础ContentControl已经为您提供要使用的Content属性时,为什么要定义MainContent属性,这可能是您尝试公开的第二部分内容。