matriz de control es nula cuando se coloca dentro de un ContentControl
-
29-09-2019 - |
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.