UserControl mit DataBinding
-
Samstag, 10. März 2012 10:44Moderator
Ich wollte ein UserControl Schreiben das wie eine TextBox funktioniert, nur das es nur Zahlen aufnehmen kann. Dazu habe ich folgenden Code:
<TextBox x:Class="Koopakiller.WPF.Controls.NumericTextBox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="23" d:DesignWidth="120" Name="textBox" PreviewTextInput="textBox_PreviewTextInput" TextChanged="textBox_TextChanged" > </TextBox>In der cs-Datei ist die Basisklasse entsprechend von TextBox abgeleitet.
- Nun wollte ich Minimum und Maximum der Zahlen festlegen können, dazu brauche ich 2 Eigenschaften, mein Problem dabei ist, das ich da auch "infinty" bei Maximum angeben können möchte. Das versteht double natürlich nicht.
- Mein nächstes Problem ist das DataBinding. Ich weiß das ich da ein DependencyProperty benötige, dieses verstehe ich jedoch garnicht.
Wie muss ich das machen, das das funktioniert?
Koopakiller - http://koopakiller.ko.ohost.de/
Alle Antworten
-
Samstag, 10. März 2012 19:47
Hi,
zuerst: für Controls, die funktionale Änderungen (Erweiterungen) an bestehenden Controls bringen, würde ich ein CustomControl anstatt eines UserControls verwenden. Von TextControl abzuleiten ist natürlich richtig.
Und: es ist nicht ausreichend, PreviewTextInput abzufangen. Du solltest auch auf Programmanweisungen wie myNumTextBox.Text = "ätsch ... ohne Zahlen" korrekt reagieren können.
Zu Deinen Anmerkungen:
1. C# sieht eine Reihe von statischen Konstanten double.PositiveInfinity, double.NegativeInfinity und (die für diesen Fall von mir favorisierte) double.NaN vor. Helfen die Dir nicht?
2. Da gibt es eigentlich gar nicht viel zu verstehen. Ich nehme mal an, die verschiedenen Stellen, an denen die DPs erklärt werden, brauche ich Dir nicht aufzuzählen. Kannst Du evtl. beschreiben, was Du nicht verstehst. Oder Du verwendest einfach mal zum Probieren das VS-Code-Snippet "propdp" ("ownerclass" ist Deine NumericTextBox und den mit "0" vorgeschlagenen Wert für "nicht gesetzt" ersetzt Du durch double.NaN). Es ist wirklich nicht so viel anders, als eine 'normale' Property.
Gruß
Jürgen- Als Antwort markiert KoopakillerMicrosoft Community Contributor, Moderator Samstag, 10. März 2012 23:47
-
Samstag, 10. März 2012 23:47Moderator
Danke!
Auf das mit double.NaN hätte ich auch selbst kommen können.
Mein Problem war das ich vergessen hatte die Schnittstelle zu Implementieren:
public event PropertyChangedEventHandler PropertyChanged;
Ansonsten schien der Code schon richtig gewesen zu sein:public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Minimum", typeof(double?), typeof(NumericTextBox)); public double? Minimum { get { return this.GetValue(MinimumProperty) as double?; } set { this.SetValue(MinimumProperty, value); } }
Und danke nochmals bezüglich den .Text="ätsch... sachen, werde ich noch ändern.
Koopakiller - http://koopakiller.ko.ohost.de/

