Verschwindet
Hi Ich habe folgendes Problem
Ich Möchte ein CustomControl schreiben (Digital_Control)
Image (Image.PNG)
durch den Klick auf den Button öffnet sich das Popup mit 6 Steuerbuttons
Image (Image.PNG)
Die Contens der einzelnen Buttons habe ich so Deklariert und kann sie auch
5x mit anderen Namen.
private static readonly DependencyProperty _cont_center =
DependencyProperty.Register("cont_center", typeof(FrameworkElement), typeof(Digital_Control),
new FrameworkPropertyMetadata());
public FrameworkElement Center
{
get
{
return (FrameworkElement)GetValue(_cont_center);
}
set
{
SetValue(_cont_center, value);
}
}
Nun habe ich im ControlTemplate die Bindings geschrieben:
...<Button x:Name="PART_MAIN"
Content="{Binding Path=cont_center, RelativeSource={RelativeSource Mode=TemplatedParent}}">
<Button.Background>
....
<Button x:Name="PART_CENTER"
Content="{Binding Path=cont_center, RelativeSource={RelativeSource Mode=TemplatedParent}}">
</Button>
...
Und jetzt kommt meine Frage?
Wieso hat nach dem Öffnen des Popups, der Main Button keinen Content mehr?
Image (Image.PNG)
Danke im Voraus
Hi W077Y,
mein erster Gedanke ist, daß du das DependencyProperty falsch benannt hast:
private static readonly DependencyProperty _cont_center =
DependencyProperty.Register("cont_center", typeof(FrameworkElement), typeof(Digital_Control),
new FrameworkPropertyMetadata());
Die Naming Conventions sehen vor, daß es genauso heißen muß wie das zugehörige Property und auch öffentlich zugänglich sein muß, in deinem Fall also:
public static readonly DependencyProperty cont_centerProperty =
DependencyProperty.Register("cont_center", typeof(FrameworkElement), typeof(Digital_Control),
new FrameworkPropertyMetadata());
Wobei das ziemlich merkwürdig aussieht in meinen Augen, weil du ein öffentliches Property in Kleinschreibung deklarierst. Naming Conventions sind eine feine Sache.
Christian
// Edit:
Ich hab übersehen, daß du auch den Namen des Properties falsch angegeben hast beim Registrieren. Da dein Property Center heißt, muß das DependencyProperty CenterProperty heißen:
public static readonly DependencyProperty CenterProperty =
DependencyProperty.Register("Center", typeof(FrameworkElement), typeof(Digital_Control),
new FrameworkPropertyMetadata());
Weeks of programming can save you hours of planning
Schau mal in die Debugger-Ausgabe, ob da Bindungsfehler oder Exceptions auftauchen.
Ich würde evtl beim
new FrameworkPropertyMetadata()
noch ein OnChanged Event anhängen. Ich mach es immer mit dem Event, ist halt mehr Code, dafür kannst am Anfang ein Default Value angeben und durch die Änderung der Property nachvollziehen, was sich ändert oder nicht.