3

我有一个从ContentControl3 个属性派生的简单控件。

当我尝试使用放置在内部的控件执行 control.TransformToVisual() 时,我的问题就出现了MainContent。它总是提出一个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>
4

1 回答 1

-2

您是否尝试过使用ContentPresenter类而不是ContentControlControlTemplate 中的类来在模板中呈现这些属性?我不确定它是否与您的 ArgumentNullException 有关,但通常 a 的内容通过 aContentControl暴露在模板上ContentPresenter

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

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

于 2010-06-22T17:39:10.050 回答