Hallo zusammen,
versuche gerade in einem WPF UserControl ( NumaricVarOut ) 2 Properties miteinander zu multiplizieren.
Leider führen meine Versuche nicht zum Erfolg.
Bin was C# angeht absoluter Anfänger.
Ich habe ein dependency property erstellt mit dem Namen FactorFloat. Ausgabe des Controls ist "Value"
Code:
namespace MMC.Components.Controls
{
public class NumericVarOut : VisiWin.Controls.NumericVarOut
{
public NumericVarOut()
{
this.Value = this.Value * FactorFloat;
}
public Double FactorFloat
{
get { return (Double)GetValue(FactorPropertyFloat); }
set { SetValue(FactorPropertyFloat, value); }
}
// Using a DependencyProperty as the backing store for ActualSpeedVariableName. This enables animation, styling, binding, etc...
public static readonly DependencyProperty FactorPropertyFloat =
DependencyProperty.Register("FactorFloat", typeof(Double), typeof(NumericVarOut), new UIPropertyMetadata(1.0));
}
}
Ich denke ich muss noch auf das ValueChanged Event reagieren aber alle Beispiele die ich gefunden habe haben irgendwie so nicht funktioniert.
Ziel des ganzen ist es jedem "NumaricVarOut" einen Faktor mitzugeben um skalieren zu können.
Hoffe ich habe es einigermaßen verständlich rüber gebracht 😉
Gruß
Hallo Webwiesel1212
Du kannst eventuell vom NumericVarOut-Control den Setter von Value überschreiben, oder es das Control bietet sowas wie ValueChangedEvent an.
Kann ich von hier aus jetzt nicht sehen.
Ansonsten kannst du zusätzlich im Setter von FactoryFloat die Berechnung auslösen oder machen.
public Double FactorFloat
{
get { return (Double)GetValue(FactorPropertyFloat); }
set
{
SetValue(FactorPropertyFloat, value); }
this.Value = this.Value * FactorFloat;
}
Gruß
Alf
Die PropertyMetadata-Klassen haben einen PropertyChangedCallback-Parameter, da übergibst Du eine Methode.
Die Methode wird dann von WPF aufgerufen, wenn sich was geändert hat, dann kannst Du die neuen Werte multiplizieren und der Value-Property zuweisen.
Bin was C# angeht absoluter Anfänger.
Dann solltest Du nicht mit WPF starten, auch nicht mit WinForms oder Unity.
Fang mit einfachen Konsolen-Programmen an, bis die C#-Grundlagen sitzen.
Hi,
erst mal danke für die Antwort!
Leider klappt die Berechnung an dieser Stelle nicht.
public Double FactorFloat
{
get { return (Double)GetValue(FactorPropertyFloat); }
set
{
SetValue(FactorPropertyFloat, value); }
this.Value = this.Value * FactorFloat;
}
Fehlermeldung VS 2019
Fehler CS1014 get- oder set-Accessor erwartet.
Ein ValueChange Event ist vorhanden aber keine Idee wie ich das einbinde. Alle Beispiele im Netzt passen nicht zu meinem Fall oder ich verstehe es nicht 😉
Gruß
SetValue(FactorPropertyFloat, value); }
Die geschweifte Klammer ist zu viel bzw. zu früh gesetzt.
Also nicht immer blind kopieren und dann hoffen, dass es klappt.
Der Setter wird von WPF nicht aufgerufen, das passiert im Hintergrund, deshalb gibt es ja den Callback.
Aber natürlich ist die Geschweifte Klammer hinter dem SetValue trotzdem falsch.
Und wie man denn Callback nutzt, beantwortet eine simple Google-Suche, führt mich dann zu:
https://learn.microsoft.com/en-us/dotnet/api/system.windows.propertychangedcallback?view=windowsdesktop-7.0
Abgesehen davon:
this.Value = this.Value * FactorFloat;
Wenn das auch passieren soll, wenn Value sich ändert, dann hast Du eine Endlosschleife - dein Vorhaben funktioniert also nicht.
Und nochmal:
Deine Fragen sind absolute Basics von den Grundlagen.
Du wirst mit WPF nur verzweifeln, wenn Du dich nicht erst auf die Grundlagen konzentrierst.