myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » [Gelöst] Beliebiges Control - mit angezeigter Maßeinheit dahinter
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[Gelöst] Beliebiges Control - mit angezeigter Maßeinheit dahinter

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
_Cashisclay _Cashisclay ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.10.2014
Beiträge: 253


_Cashisclay ist offline

[Gelöst] Beliebiges Control - mit angezeigter Maßeinheit dahinter

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

ich hätte gerne die Maßeinheit (g, Kg etc.) direkt in (Beispielsweise : TextBox, NumericUpDown)
dem jeweiligen Control hinter dem Inhalt drin.

Das sobald etwas eingegeben wurde immer die entsprechend hintrelegte Einheit dahinter angezeigt wird.

Hat damit jemand Erfahrung oder eine Lösung parat?

Grüße

_Cashisclay hat dieses Bild (verkleinerte Version) angehängt:
Unbenannt.png
Volle Bildgröße

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von _Cashisclay am 17.05.2019 14:53.

Neuer Beitrag 16.05.2019 13:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.358
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Woran soll anhand der Eingabe erkannt werden ob du 1.000 Gramm, Kilo oder Tonnen als Anwender eingeben willst?
Solche Maßeinheiten sind i.d.R. spezifisch auszuwählen.

Nachtrag:
In einer Textbox würde ich dies übrigens nicht einfügen.
Wenn du nur die numerischen Werte willst, musst du dann den Text wiederum um die Maßeinheit befreien.
Macht unnötig Mehraufwand auf deiner Seite.

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 16.05.2019 14:56.

Neuer Beitrag 16.05.2019 14:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
_Cashisclay _Cashisclay ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.10.2014
Beiträge: 253

Themenstarter Thema begonnen von _Cashisclay

_Cashisclay ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

für nummerische Werte wäre natürlich ein anderes Control besser.

Das soll die Eingabe gar nicht erkennen ich will einfach nur hinter der Eingabe die Einheit stehen haben, die geb ich dem Control auch gerne mit, wenn es das dann kann.

Ich finde aktuell nichts.

Grüße
Neuer Beitrag 16.05.2019 14:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
witte
myCSharp.de-Mitglied

Dabei seit: 03.09.2010
Beiträge: 826


witte ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

* Manche Controls besitzen ein EditTemplate und ein DisplayTemplate, die ausgetauscht werden wenn der Cursor drin ist (DataGridTextViewColumn?).
* eine zweite Möglichkeit wären vllt Trigger: zeige ein anderes Property an wenn das Control den Focus hat (z.B watermark): zeige die Einheit an wenn der Wert gerade nicht bearbeitet wird.
Neuer Beitrag 16.05.2019 19:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
_Cashisclay _Cashisclay ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.10.2014
Beiträge: 253

Themenstarter Thema begonnen von _Cashisclay

_Cashisclay ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hast du denn ein Beispiel für die Trigger?

An und für sich klingt das ja gut, klappt nur aktuell nicht so einfach.

XML-Code:
<Trigger Property="IsFocused" Value="True">

                                                <Setter Property="Text" Value="{Binding MaterialPreparationOfProtocols.Item.LastnameOfChildren, UpdateSourceTrigger=PropertyChanged}"/>

                                            </Trigger>

                                            <Trigger Property="IsFocused" Value="False">

                                                <Setter Property="Text" Value="{Binding MaterialPreparationOfProtocols.Item.LastnameOfChildren, StringFormat={}{0}g, UpdateSourceTrigger=PropertyChanged}"/>

                                            </Trigger>

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von _Cashisclay am 17.05.2019 06:58.

Neuer Beitrag 17.05.2019 06:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
_Cashisclay _Cashisclay ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.10.2014
Beiträge: 253

Themenstarter Thema begonnen von _Cashisclay

_Cashisclay ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Okay habs hinbekommen, die Idee mit dem Focus hatte ich auch schon, aber irgendwie hatte ich das nicht weiterverfolgt .. der Denkanstoß hat mir geholfen Danke!

Lösung :

Zusätzliche Klasse für das Focus Event

C#-Code:
    /// <summary>
    ///     Solution of this Class
    ///         https://stackoverflow.com/questions/1356045/set-focus-on-textbox-in-wpf-from-view-model-c
    /// </summary>

    public static class FocusBehavior
    {

        #region Dependency Properties

            public static readonly DependencyProperty IsFocusedProperty =
                        DependencyProperty.RegisterAttached("IsFocused",
                                                                typeof(bool?),
                                                                    typeof(FocusBehavior),
                                                                        new FrameworkPropertyMetadata(IsFocusedChanged){ BindsTwoWayByDefault = true });

        #endregion

        #region Private Methods

            private static void IsFocusedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {

                var fe = (FrameworkElement)d;

                    if (e.OldValue == null)
                    {

                        fe.GotFocus += FrameworkElement_GotFocus;

                        fe.LostFocus += FrameworkElement_LostFocus;

                    }

                        if (!fe.IsVisible)
                        {

                            fe.IsVisibleChanged += new DependencyPropertyChangedEventHandler(fe_IsVisibleChanged);

                        }

                            if ((bool)e.NewValue)
                            {

                                fe.Focus();

                            }

            }

            private static void fe_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
            {

                var fe = (FrameworkElement)sender;

                    if (fe.IsVisible && (bool)((FrameworkElement)sender).GetValue(IsFocusedProperty))
                    {

                        fe.IsVisibleChanged -= fe_IsVisibleChanged;

                        fe.Focus();

                    }

            }

            private static void FrameworkElement_GotFocus(object sender, RoutedEventArgs e)
            {

                ((FrameworkElement)sender).SetValue(IsFocusedProperty, true);

            }

            private static void FrameworkElement_LostFocus(object sender, RoutedEventArgs e)
            {

                ((FrameworkElement)sender).SetValue(IsFocusedProperty, false);

            }

        #endregion

        #region Public Methods

            #region Get

                public static bool? GetIsFocused(DependencyObject element)
                {

                        if (element == null)
                        {

                            throw new ArgumentNullException("element");

                        }

                    return (bool?)element.GetValue(IsFocusedProperty);
                }

            #endregion

            #region Set

                public static void SetIsFocused(DependencyObject element, bool? value)
                {

                        if (element == null)
                        {

                            throw new ArgumentNullException("element");

                        }

                    element.SetValue(IsFocusedProperty, value);

                }

            #endregion

        #endregion

    }

MVVM :

C#-Code:
            public string                               TextBoxMaterialPreparationProtcolsWeightText
            {
                get
                {
                    if (TextBoxMaterialPreparartionProtocolsWeightIsFocused)
                    {

                        return Item.Weight.ToString();

                    } else { return Item.Weight + "g"; }
                }
                set
                {

                    // Regex

                        Regex Regex = new Regex("^*[0-9]$");

                            if (Regex.IsMatch(value.ToString()))
                            {

                                Item.Weight = value != null ? Convert.ToInt32(value) : (int?)null;

                            }
else
                            {

                                if (String.IsNullOrEmpty(value)) { Item.TimeShift = null; }

                            }

                    Raise(nameof(TextBoxMaterialPreparationProtcolsWeightText));

                }
            }

            public bool                                 TextBoxMaterialPreparartionProtocolsWeightIsFocused
            {
                get { return _TextBoxMaterialPreparartionProtocolsWeightIsFocused; }
                set
                {
                    _TextBoxMaterialPreparartionProtocolsWeightIsFocused = value;
                    Raise(nameof(TextBoxMaterialPreparartionProtocolsWeightIsFocused));

                        Raise(nameof(TextBoxMaterialPreparationProtcolsWeightText));
                }
            }

XAML :

XML-Code:
<TextBox    Grid.Column="1"
                                            HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
                                                MaxLength="9"
                                                    mah:TextBoxHelper.ClearTextButton="False"
                                                        FocusBehavior:FocusBehavior.IsFocused="{Binding MaterialPreparationOfProtocols.TextBoxMaterialPreparartionProtocolsWeightIsFocused, UpdateSourceTrigger=PropertyChanged}"
                                                            Text="{Binding MaterialPreparationOfProtocols.TextBoxMaterialPreparationProtcolsWeightText, UpdateSourceTrigger=PropertyChanged}"
                                        Style="{StaticResource BaseTextBox}"
/>

Grüße

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von _Cashisclay am 17.05.2019 11:03.

Neuer Beitrag 17.05.2019 10:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 6 Monate.
Der letzte Beitrag ist älter als 6 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 20.11.2019 11:11