Frage

Ich brauche eine Abhängigkeitseigenschaft für eine Kontrolle (Slider.Value) in meinem Code zu setzen, ohne eine Value Ereignistriggerung (da ich den Wert gesetzt, nicht der Benutzer). Was ist der beste Weg, um diese Situation in WPF zu behandeln?

Zur Klarstellung, was ich versuche zu tun, hook up WPF Schieberegler, um einen WinForms User Control. Zur Zeit in meiner app habe ich ein Value Event-Handler, der den Schieber Wert auf die WinForms-Steuerung über einen Methodenaufruf übergibt. Die WinForms Kontrolle (die sich um eine native OpenGL-Fenster tatsächlich ein Wrapper ist) muss in der Lage sein, dynamisch den Schieberegler auf Basis zu ändern auf sie interne Berechnungen ist. Um dies zu tun ich eine Abstraktion eines Schiebereglers (iSlider), instanziieren ich einen WPF-Geschmack dieses Schiebers in meiner app, und einen Griff übergeben, um es Basis ist auf die WinForms Kontrolle über eine .NET-Eigenschaft auf dem WinForms User Control. All dies zur Zeit arbeitet, es ist nur, dass, wenn die interne Logik der Schieber muss sich ändern entscheidet, ruft er iSlider :: SetPos (), die dann den WPF Schieber ändert, die dann eine Value Ereignis auf dem Schieber löst und den Handler für dieses Ereignis extrahiert die Position des Schiebers und leitet es in der WinForms Kontrolle, die die Veranstaltung in erster Linie entstanden. Die Vorschläge von ligaz und Alan Le scheinen beide wie sie funktionieren sollen, aber ich bin nur nicht sicher, ob ich darüber in der besten Weise werde.

War es hilfreich?

Lösung

Hier ist eine einfach Abhilfe / Hack. Fügen Sie eine boolean den Überblick zu behalten, ob Sie die Einstellung geändert haben, sagen wir mal „IsChangedByMe“. Wenn Sie die Abhängigkeitseigenschaft in Code zu ändern, setzen Sie den Bool auf true. Im Value Ereignisse, wenn IsChangedByMe wahr ist, nichts tun.

Andere Tipps

Sind Sie sicher, dass Sie wirklich das tun wollen? Wenn es ein Stück UI Databound zu dieser Eigenschaft und es Sie ermöglichen, um den Wert zu ändern, ohne dass die Value Ereignistriggerung Sie schnell mit den Daten mit Ihrem UI nicht mehr synchronisiert würden am Ende.

Im Fall des Schiebers, vorstellen, dass der Benutzer es bei 75% platziert. Jetzt Ihr Code ändert sich auf 10% im Hintergrund, aber unterdrückt die Änderungsbenachrichtigung. Es sieht immer noch auf dem Bildschirm, wie es bei 75% ist (da es nicht gesagt wurde geändert), aber es wird durch den Code als 10% verwendet wird, die ausgeführt wird. Klingt wie ein Rezept für Verwirrung.

Eine mögliche Lösung ist von Slider abzuleiten und außer Kraft setzen OnValueChanged (...) . Wenn Sie nicht wollen, um das Ereignis zu erhöhen, sollten Sie nichts tun, sonst sollten Sie die Basisimplementierung aufrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top