Textbox und Style für IsEnabled = false

  • WPF
  • .NET 5–6

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von MasterQ.

    Textbox und Style für IsEnabled = false

    Hallo,

    mal was anderes.

    Ich möchte Daten in einem Formular ausgeben und dazu eine TextBox verwenden. In einem Fall muss TextBox.IsEnabled auf false sein, damit man die Daten nicht mehr ändern kann. Stellt man IsEnabled auf false, dann wird das Element "ausgegraut". Bei mir soll dann aber der Inhalt (Text) weiterhin schwarz bleiben und nicht grau werden.

    XML-Quellcode

    1. <Style x:Key="TextBoxStyle" TargetType="TextBox">
    2. <Setter Property="OverridesDefaultStyle" Value="false"/>
    3. <Setter Property="VerticalContentAlignment" Value="Center"/>
    4. <Setter Property="IsEnabled" Value="true"/>
    5. <Style.Triggers>
    6. <Trigger Property="IsEnabled" Value="False">
    7. <Setter Property="Foreground" Value="Black"/>
    8. </Trigger>
    9. <Trigger Property="IsEnabled" Value="True">
    10. <Setter Property="Foreground" Value="Green"/>
    11. </Trigger>
    12. </Style.Triggers>
    13. </Style>


    Diese Beispiel findet man so oder ähnlich im Netz, es tut aber nicht. Egal was ich da als Foreground eintrage, die Farben werden aufgehellt. Für IsEnabled=true funktioniert es so, wie ich mir das vorstelle aber für false nicht.

    Bei Rot z.B. könnte ich DarkRed anstatt Red nehmen, aber dunkles Schwarz gibt es nicht. DarkBlack :S

    Gibt es da irgendeinen Parameter, den ich noch verändern muss, damit aus Schwarz nicht mehr Grau wird?

    Bisher konnte ich nichts entsprechendes im Netz finden.

    Gruß

    MQ
    Hallo

    Also mit dem Foreground ist es doch nicht getan oder?
    Der Hintergrund wird ja auch normalerweise Grau.

    Nur mal so, warum machste die Textbox nicht ReadOnly? IsReadOnly="true"
    Ist doch einfacher. Und der User hat die möglichkeit von Copy&Paste usw. Dafür ist die Eigenschaft ja da.

    Ansonsten musst du schon das Template neu setzen.

    XML-Quellcode

    1. <SolidColorBrush x:Key="DisabledForegroundBrush" Color="Black" />
    2. <SolidColorBrush x:Key="DisabledBackgroundBrush" Color="White" />
    3. <SolidColorBrush x:Key="NormalForegroundBrush" Color="Green" />
    4. <SolidColorBrush x:Key="NormalBackgroundBrush" Color="White" />
    5. <Style TargetType="TextBox">
    6. <Setter Property="Background" Value="White"/>
    7. <Setter Property="BorderBrush" Value="Black"/>
    8. <Setter Property="Template">
    9. <Setter.Value>
    10. <ControlTemplate TargetType="TextBox">
    11. <Border Name="Bd" BorderThickness="{TemplateBinding BorderThickness}"
    12. BorderBrush="{TemplateBinding BorderBrush}"
    13. Background="{TemplateBinding Background}"
    14. SnapsToDevicePixels="true">
    15. <ScrollViewer Name="PART_ContentHost" Background="{TemplateBinding Background}"
    16. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
    17. </Border>
    18. <ControlTemplate.Triggers>
    19. <Trigger Property="IsEnabled" Value="False">
    20. <Setter Value="{StaticResource DisabledBackgroundBrush}" Property="Background" />
    21. <Setter Value="{StaticResource DisabledForegroundBrush}" Property="Foreground" />
    22. <Setter TargetName="PART_ContentHost" Property="Background" Value="{StaticResource NormalBackgroundBrush}"/>
    23. </Trigger>
    24. </ControlTemplate.Triggers>
    25. </ControlTemplate>
    26. </Setter.Value>
    27. </Setter>
    28. </Style>


    Tu dir selbst einen gefallen und schau mal in meine Tutorialreihe (siehe Signatur) da wird das alles ausführlich erklärt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Hallo
    Also mit dem Foreground ist es doch nicht getan oder?
    Der Hintergrund wird ja auch normalerweise Grau.


    Ja schon, nur das "stört" nicht. Wenn die Textfarbe grau ist, dann lässt sich das schwerer lesen. Daher hätte ich gerne schwarz. Der Hintergrund ist da nicht so bedeutend.


    Nur mal so, warum machste die Textbox nicht ReadOnly? IsReadOnly="true"
    Ist doch einfacher. Und der User hat die möglichkeit von Copy&Paste usw. Dafür ist die Eigenschaft ja da.


    Aua, großes Aua. Auaauaaua!

    Danke für den Hinweis. Daran hatte ich überhaupt nicht gedacht. Manchmal liegt alles so nah!


    Ansonsten musst du schon das Template neu setzen.


    Das hatte ich mich auch gefragt. Wie gesagt, im Netz findet man auch Posts, die es so machen wie ich hier vorgestellt. Und es sieht so aus, als ob es so auch (mal) funktioniert (hat). Zumindest bei die Leut da draußen.


    Tu dir selbst einen gefallen und schau mal in meine Tutorialreihe (siehe Signatur) da wird das alles ausführlich erklärt.


    Hätte wohl geholfen.

    Danke