Benutzer mit den meisten Antworten
DependencyProperty WPF-Parameter in eine Klasse

Frage
-
Salü zäme
Ich möchte eine Klasse (3 Integer-Werte) in eine DependencyProperty einbauen. Dieses soll als Parameter-Feld in WPF genutzt werden können (Min- bzw. Max-Wert).
Kann ich das und wie übergebe ich die Parameter?
In einen Beispiel mit einem TimeSan-DependencyProperty habe ich gesehen dass dies wie folgt aussieht:.... <wt:Steuerelement MinValue="12:00:00"/> .....
Ist das allgemein so, dieser Doppelpunkt als Trenner, oder ist hier irgend ein Converter dazwischen, welcher dieser Wert in ein TimeSpan umrechnet. Falls ja, wie definiere ich einen soclhe Converter in einem User-Steuerelement?
Danke und Gruss
Jakob
Jakob Brunner, Switzerland
Antworten
-
Hallo Jakob,
Du müsstest eigentlich nur die DP bereitstellen, halt vom entspr. Typ:
public TimeSpan TheTimeSpan { get { return (TimeSpan)GetValue(TheTimeSpanProperty); } set { SetValue(TheTimeSpanProperty, value); } } public static readonly DependencyProperty TheTimeSpanProperty = DependencyProperty.Register( "TheTimeSpan", typeof(TimeSpan), typeof(TheUserControl), new UIPropertyMetadata(new TimeSpan(0,0,0), (o, e) => { MessageBox.Show("New value: " + ((TimeSpan)e.NewValue).ToString()); }) );
Ein Converter ist nicht notwendig, wenn der Typ in der DP richtig/explizit festgelegt wurde. Die einzelnen Bestandteile der TimeSpan (.Hours ... .Milliseconds) kannst Du im Code ja ohnehin ansprechen. Im XAML erlaubt die TimeSpan Notation, dass von ausschließlich Stunden (TheTimeSpan="05") bis hin zu Stunden:Minuten:Sekunden.Millisekunden (TheTimeSpan="05:04:03.123" - ms mit vorangestelltem Punkt!) angegeben werden können - dafür musst Du code-seitig absolut nichts tun.
angeben
Cheers,
Olaf
http://blogs.intuidev.com- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 30. November 2010 14:58
Alle Antworten
-
Hallo Jakob,
Du möchtest 3 Integer-Werte in einer DependencyProperty speichern? Dann musst Du die DependencyProperty vom Typ einer Collection oder vom Typ einer speziellen Klasse machen, die selbst wiederum drei Properties vom Typ int hat.
Damit es in XAML richtig geparst werden kann, erstellst Du eine Subklasse von TypeConverter und überschreibst die Methode ConvertFrom und machst aus dem erhaltenen String deinen konkreten Typen.
Thomas Claudius Huber - http://www.thomasclaudiushuber.com -
Hallo Jakob,
Du müsstest eigentlich nur die DP bereitstellen, halt vom entspr. Typ:
public TimeSpan TheTimeSpan { get { return (TimeSpan)GetValue(TheTimeSpanProperty); } set { SetValue(TheTimeSpanProperty, value); } } public static readonly DependencyProperty TheTimeSpanProperty = DependencyProperty.Register( "TheTimeSpan", typeof(TimeSpan), typeof(TheUserControl), new UIPropertyMetadata(new TimeSpan(0,0,0), (o, e) => { MessageBox.Show("New value: " + ((TimeSpan)e.NewValue).ToString()); }) );
Ein Converter ist nicht notwendig, wenn der Typ in der DP richtig/explizit festgelegt wurde. Die einzelnen Bestandteile der TimeSpan (.Hours ... .Milliseconds) kannst Du im Code ja ohnehin ansprechen. Im XAML erlaubt die TimeSpan Notation, dass von ausschließlich Stunden (TheTimeSpan="05") bis hin zu Stunden:Minuten:Sekunden.Millisekunden (TheTimeSpan="05:04:03.123" - ms mit vorangestelltem Punkt!) angegeben werden können - dafür musst Du code-seitig absolut nichts tun.
angeben
Cheers,
Olaf
http://blogs.intuidev.com- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 30. November 2010 14:58