40 Stimmen

Wie man die deaktivierte Hintergrundfarbe der TextBox in WPF ändert

Ich habe den folgenden Thread gesehen, der mit meiner Frage zusammenhängt:

WPF ComboBox: Hintergrundfarbe bei Deaktivierung

Der obige Abschnitt behandelt das Ändern der Inhaltsvorlage für eine ComboBox . Ich arbeite mit WPF, bin etwas neu zu Stilen und Vorlagen, und ich möchte die matte graue Hintergrundfarbe eines deaktivierten ändern TextBox zu einer anderen Farbe. Wir verwenden TextBoxes in unserer Anwendung häufig, und wir finden die Standard-Farbeinstellungen schwierig zu lesen.

Ich habe den folgenden Lösungsversuch ausgearbeitet. Aber natürlich funktioniert er nicht. Kann mir jemand sagen, woran das liegt?

Upload Image

2voto

Greg Sansom Punkte 19667

Versuchen Sie, die Neudefinition von Kontrollschablonen nach Möglichkeit zu vermeiden. Sie neigen dazu, eine Menge Code-Overhead hinzuzufügen und können mit der Zeit schwer zu pflegen sein.

Ich würde den folgenden Code im Loaded-Ereignis verwenden:

ClassicBorderDecorator o = VisualTreeHelper.GetChild(this.textBox1, 0) as ClassicBorderDecorator;
if (o != null)
{
    o.Background = new SolidColorBrush(Colors.Transparent);
}

0voto

TarmoPikaro Punkte 4208
By adding <Window.Resources> after <Window> and before <Grid> will make your text box behave like normal winforms textbox.

<Window x:Class="..." Height="330" Width="600" Loaded="Window_Loaded" WindowStartupLocation="CenterOwner">

<Window.Resources>
    <Style TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="IsReadOnly" Value="True">
                <Setter Property="Background" Value="LightGray" />
            </Trigger>
            <Trigger Property="IsReadOnly" Value="False">
                <Setter Property="Background" Value="White" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>

Der Code stammt von der folgenden Webseite:

wpf: Auswählen des Textes in TextBox mit IsReadOnly = true?

Und der Stil wurde an die Winforms angepasst. (Ihr Aussehen ist enabled = false, nicht readonly = true)

Und natürlich muss für Ihr Textfeld das Attribut IsReadOnly="True" gesetzt sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X