le parent de contrôle est nulle lorsqu'il est placé à l'intérieur d'un ContentControl
-
29-09-2019 - |
Question
J'ai un contrôle simple dérivé de ContentControl
avec 3 propriétés.
Mon problème vient quand je tente d'effectuer une control.TransformToVisual () avec une commande qui est placé à l'intérieur MainContent
. Il apporte toujours un ArgumentNullException
.
Je pense cela en raison du contrôle ayant une propriété de parent null. Y at-il un moyen simple de façon de contourner cela?
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>
Pas de solution correcte
Autres conseils
Avez-vous essayé d'utiliser la balise ContentPresenter
classe au lieu de la classe ContentControl
au sein de votre ControlTemplate pour présenter ces propriétés dans le modèle? Je ne sais pas si elle est liée à votre ArgumentNullException, mais généralement le contenu d'un ContentControl
est exposé sur le modèle via un ContentPresenter
.
Depuis votre contrôle de dérive de la ContentControl
ContentPresenter
se lient automatiquement le contenu et les propriétés ContentTemplate pour vous quelle que soit la propriété de contenu est défini sur. Vous la propriété Content bind pourrait aussi manuellement du ContentPresenter
à votre propriété ValidationContent.
Je ne sais pas pourquoi vous définissez une propriété Maincontent lorsque la ContentControl
de base vous donne déjà une propriété de contenu à utiliser, peut-être qui est un deuxième morceau de contenu que vous essayez d'exposer.