Laden...

2 Properties innerhalb eines Controls multiplizieren

Erstellt von Webwiesel1212 vor einem Jahr Letzter Beitrag vor einem Jahr 300 Views
W
Webwiesel1212 Themenstarter:in
4 Beiträge seit 2015
vor einem Jahr
2 Properties innerhalb eines Controls multiplizieren

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ß

A
764 Beiträge seit 2007
vor einem Jahr

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

2.078 Beiträge seit 2012
vor einem Jahr

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.

W
Webwiesel1212 Themenstarter:in
4 Beiträge seit 2015
vor einem Jahr

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ß

J
251 Beiträge seit 2012
vor einem Jahr
  
  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.

2.078 Beiträge seit 2012
vor einem Jahr

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.