Pregunta

Tengo un control simple derivado de ContentControl con 3 propiedades.

Mi problema viene cuando intento realizar una control.TransformToVisual () con un control que se coloca dentro MainContent. Siempre nos lleva a un ArgumentNullException.

Mi conjetura es esto debido al control que tiene una propiedad Parent nula. ¿Hay una manera simple de forma de evitar esto?

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>

No hay solución correcta

Otros consejos

¿Ha intentado utilizar el ContentPresenter clase en lugar de la clase ContentControl dentro de su ControlTemplate para presentar dichas propiedades dentro de la plantilla? No estoy seguro de si está relacionado a su ArgumentNullException, pero por lo general el contenido de un ContentControl se expone en la plantilla a través de un ContentPresenter.

Desde sus deriva de control de la ContentControl ContentPresenter automáticamente se unen el contenido y las propiedades ContentTemplate para que cualquiera que sea el contenido propiedad se establece en. También podría manualmente enlazar la propiedad del contenido ContentPresenter a su propiedad ValidationContent.

No estoy seguro de por qué se está definiendo una propiedad maincontent cuando el ContentControl base ya le da una propiedad de contenido para su uso, tal vez eso es una segunda pieza de contenido que está tratando de exponer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top