2 Stimmen

C# WPF - ComboBox Hervorhebung Text Farbe Problem

Ich habe ein Problem mit ComboBox Hervorhebung, die schwarzen Text auf einem blauen Hintergrund zeigt, wenn der Text für die Hervorhebung sollte weiß sein.

Ich habe Beispiele für ComboBox, die ComboBoxItems verwenden, wo der Inhalt eine Zeichenfolge ist. Die Combobox in diesen Fällen verhalten sich wie erwartet - wenn die Combobox nach unten fallen gelassen wird, wenn Sie ein Element markieren es zeigt weißen Text auf einem blauen schwarzen Hintergrund.

Ich habe jedoch ein Beispiel für eine Combobox, bei der der Inhalt jedes ComboBoxItems ein Raster ist (das Raster enthält 2 Spalten - die erste enthält Text und die zweite eine Zeile - es ist eine Combobox mit Zeilendicke). In diesem Fall, wenn die Combobox heruntergeklappt wird, wird, wenn Sie ein Element markieren, schwarzer Text auf blauem Hintergrund anstelle von weißem Text angezeigt. Hinweis: Auch wenn ich den Zeilenteil entferne und somit nur eine Spalte mit Text habe, sehe ich das Problem immer noch.

Am ehesten kann ich das Problem lösen, wenn ich der Combobox für SystemColors.HighlightBrushKey und SystemColors.HighlightTextBrushKey eine Ressource hinzufüge, mit der ich die Farbe des Pinsels festlegen kann. SystemColors.HighlightBrushKey ändert jedoch korrekt die Hintergrundfarbe der Hervorhebung (das ist jedoch nicht das, was ich will), und wenn ich versuche, SystemColors.HighlightTextBrushKey zu verwenden, von dem ich dachte, er würde die Textfarbe eines hervorgehobenen Elements ändern, passiert nichts (die Farbe ändert sich nicht).

Beispiel für bearbeiteten Code:

var combo = new ComboBox();

Func<double, object> build = d =>
{
    var grid = new Grid();
    grid.ColumnDefinitions.Add(new ColumnDefinition {Width = GridLength.Auto});

    var label = new Label {Content = d};
    grid.Children.Add(label);
    Grid.SetColumn(label, 0);

    var comboBoxItem = new ComboBoxItem {Content = grid, Tag = d};
    return comboBoxItem;
};

combo.Items.Add(build(0.5));
combo.Items.Add(build(1));
combo.Items.Add(build(2));
...

Ich habe es versucht:

combo.Resources.Add(SystemColors.HighlightBrushKey, Brushes.Green); // this does set the back to green (but is not what I want)
combo.Resources.Add(SystemColors.HighlightTextBrushKey, Brushes.White); // this does not change the text colour to white it stays as black

Ich bin für jede Hilfe dankbar, danke.

2voto

John Bowen Punkte 23673

Das Problem ist, dass Sie ein Label-Steuerelement verwenden, das einen festen schwarzen Vordergrund definiert, der dann nicht die Farbe des ComboBoxItems erbt, die sich je nach Hervorhebungsstatus ändert. Wenn Sie nichts Label-spezifisches machen (die Verwendung ist selten), sollten Sie in Erwägung ziehen, es in einen TextBlock umzuwandeln. Wenn Sie das Label behalten müssen, können Sie so etwas tun, um explizit zu erzwingen, dass es erbt:

<ComboBox x:Name="MyComboBox">
    <ComboBox.Resources>
        <Style TargetType="{x:Type Label}">
            <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ComboBoxItem}}, Path=Foreground}" />
        </Style>
    </ComboBox.Resources>
</ComboBox>

oder, wenn Sie es vorziehen, im Code können Sie sie einzeln einstellen:

...
var label = new Label { Content = d };
label.SetBinding(ForegroundProperty, new Binding("Foreground") { RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(ComboBoxItem), 1) });
grid.Children.Add(label);
...

0 Stimmen

Danke für die Antwort, ich kann zu TextBlock wechseln und das funktioniert gut.

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