Abrufen der Größe eines Elements mithilfe von MVVM

maddisoj

Ich habe zwei Textfelder, in denen die Position von etwas auf einer Leinwand angegeben ist. Ich möchte nur, dass die Werte in den Textfeldern eine Zahl im Bereich von 0 bis 1 sind, die einen Prozentsatz der Breite / Höhe darstellt.

Ich muss einige, wie dieser Prozentsatz in Margin-Wert umgerechnet wird. Ich bin mir jedoch nicht sicher, wie ich dies tun soll, ohne das MVVM-Muster zu brechen und über das ViewModel auf die "Zeichenfläche" zuzugreifen, um deren Größe zu ermitteln.

Wenn zum Beispiel die Leinwand 100 breit und die X-Position 0,1 ist, muss der linke Rand 10 sein.

Ich habe darüber nachgedacht, einen Befehl zu verwenden und die Zeichenfläche width / height als Ereignisargument zu senden, bin mir aber nicht sicher, wohin ich das binden würde.

XAML

<StackPanel Orientation="Horizontal">
    <TextBlock VerticalAlignment="Center" Text="Position" Width="75"/>
    <TextBox Height="25" Width="50"
             Text="{Binding Path=X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    <TextBox Height="25" Width="50"
             Text="{Binding Path=Y, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>

<Grid Height="300" Width="550">
    <TextBlock FontSize="18" FontFamily="Arial"
               Opacity="{Binding Path=Opacity}"
               Margin="{Binding Position}">
    </TextBlock>
</Grid>

ViewModel

public double X
{
    get { return Model.Position.X; }
    set
    {
        if (Model.Position.X != value)
        {
            Model.Position = new Point(value, Model.Position.Y);
            OnPropertyChanged("Position");
        }
    }
}

public double Y
{
    get { return Model.Position.Y; }
    set
    {
        if(Model.Position.Y != value)
        {
            Model.Position = new Point(Model.Position.X, value);
            OnPropertyChanged("Position");
        }
    }
}

public Thickness Position
{
    get { return new Thickness(Model.Position.X, Model.Position.Y, 0, 0); }
}
maddisoj

Die Lösung bestand darin MultiBinding, die erforderlichen Informationen als Werte zu senden:

<Setter Property="Margin">
    <Setter.Value>
        <MultiBinding Converter="{StaticResource MyMultiConverter}">
            <Binding Path="X"/>
            <Binding Path="Y"/>
            <Binding ElementName="Canvas" Path="ActualWidth"/>
            <Binding ElementName="Canvas" Path="ActualHeight"/>
        </MultiBinding>
    </Setter.Value>
</Setter>

MyMultiConverter implementiert dann a IMultiValueConverterund gibt es zurückThickness

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Abrufen der .html () eines Elements mithilfe von jQuery

Abrufen eines verwandten Elements mithilfe von Selektoren

Ermitteln der Größe eines Strings in argv mithilfe von sizeof

TensorFlow: Abrufen eines Subtensors von einem Tensor mithilfe der Indizierung

Abrufen der Argumenttypen eines Konstruktors mithilfe von Data und Typeable

Abrufen eines Teils der Zeichenfolge mithilfe von Javascript

Abrufen des Elements anhand der ID Firebase mithilfe von AngularFire

Abrufen des größten Elements in einem Array mithilfe der Rekursion

Abrufen des letzten Elements einer Liste unbekannter Größe mithilfe von Slices

Abrufen einer Nullobjektreferenz mithilfe von MVVM & Firestore

Abrufen eines Elements von einer Position in einer kreisförmigen Warteschlange mithilfe eines Iterators

Wie kann ich die Position eines Elements (Bildes) mithilfe von Javascript anstelle von CSS abrufen?

Senden eines http-Posts und Abrufen einer Anfrage in NODEJS von der Clientseite mithilfe eines Skripts

Ändern der Größe eines <amp-iframe> mithilfe von srcdoc?

Ändern der Größe eines iframes mithilfe von @media-Regeln

Abrufen der Tabellengröße mithilfe von Entity Framework

Hinzufügen eines neuen Elements zu einer ComboBox in einem DataGrid in WPF mithilfe von MVVM

Abrufen der Größe eines Arrays innerhalb einer Bedingung ohne Verwendung von $ match

Abrufen / Berechnen der korrekten Größe eines Steuerelements nach Anwendung von Render / Layouttransform

Abrufen eines 5-Tage-Wetterplakats von der openweathermap-API mithilfe von Javascript

Abrufen eines Zeichens von der Tastatur mithilfe von curses.h

Abrufen der Farbe eines Pixels aus Canvas mithilfe von getImageData mit der falschen Farbe

Abrufen eines Elements in einem Verzeichnis mithilfe von java.nio.file.Path's

Abrufen der Größe des Speicherkontos mithilfe von Powershell unter Verwendung von AZMetrics gibt häufig 0 zurück

Abrufen der InvalidSelectorException beim Versuch, die untergeordneten Knoten eines Elements mithilfe des Vereinigungsoperators (|) zu lokalisieren

Abrufen der Größe von UIView in init

Abrufen der Größe von ImageView in RemoteViews

Wie kann man die Bildansichtsgröße abhängig von der Größe eines anderen Elements ändern?

Abrufen der Kontoinformationen eines Kontakts in Salesforce mithilfe von Partner Soap Api

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv