madre di controllo è nullo quando collocato all'interno di un ContentControl
-
29-09-2019 - |
Domanda
Ho un semplice controllo derivato da ContentControl
con 3 proprietà.
Il mio problema arriva quando si tenta di eseguire un control.TransformToVisual () con un controllo che viene inserito all'interno MainContent
. Porta sempre un ArgumentNullException
.
La mia ipotesi è questo a causa del controllo che ha una proprietà Parent nulla. C'è un modo semplice per modo per aggirare questo?
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>
Nessuna soluzione corretta
Altri suggerimenti
Hai provato a usare il ContentPresenter
classe invece della classe ContentControl
all'interno ControlTemplate di presentare tali proprietà all'interno del modello? Non sono sicuro se è legato alla tua ArgumentNullException, ma in genere il contenuto di un ContentControl
è esposto sul modello tramite un ContentPresenter
.
Dal momento che le deriva dal controllo ContentControl
il ContentPresenter
automaticamente Associazione delle proprietà ContentTemplate per voi contenuti e qualunque sia la proprietà Content è impostato. Si potrebbe anche manualmente legano la proprietà Content del ContentPresenter
alla vostra proprietà ValidationContent.
Io non so perché si sta definendo una proprietà mainContent quando il ContentControl
di base ti dà già una proprietà Content uso, forse questo è un secondo pezzo di contenuto che si sta cercando di esporre.