Ich versuche, den SystemColors.HighlightBrushKey immer ein wenig dunkler als der Hintergrund der ausgewählten Zeile festzulegen. Deshalb im, mit diesem Code:So richten Sie den SystemColors.HighlightBrushKey in WPF mit einem Konverter ein
App.xaml:
<WPFTests2:SelectionBackgroundConverter x:Key="SelectionBackgroundConverter"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding Background, Converter={StaticResource SelectionBackgroundConverter}}"/>
</Application.Resources>
Window1.xaml:
<Window x:Class="WPFTests2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<Grid>
<ListBox x:Name="LB" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Grid>
Window1.xaml.cs:
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;
namespace WPFTests2
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
LB.Items.Add("Text1");
LB.Items.Add("Text2");
LB.Items.Add("Text3");
LB.Items.Add("Text4");
LB.Items.Add("Text5");
}
}
public class SelectionBackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (value != null)
{
SolidColorBrush brush = (SolidColorBrush)value;
Color newCol = brush.Color;
newCol.R -= 10;
newCol.G -= 10;
newCol.B -= 10;
BrushConverter conv = new BrushConverter();
Brush newBrush = (Brush)conv.ConvertTo(newCol, typeof(Brush));
return newBrush;
}
return Brushes.Transparent;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
//never called
return null;
}
}
}
Das Problem ist, dass der Konverter nie genannt wird ... Weiß jemand, wie der Hintergrund der ausgewählten Zeile setzen etwas dunkler als es vor der Auswahl war es?
Jede Hilfe wird geschätzt!
aktualisieren
Es sieht aus wie seine Arbeits aber leider nicht vollständig. ich den Konverter korrigiert habe wie folgt aussehen:
public class SelectionBackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (value != null)
{
SolidColorBrush brush = (SolidColorBrush)value;
Color newCol = brush.Color;
newCol.R -= 10;
newCol.G -= 10;
newCol.B -= 10;
return new SolidColorBrush(newCol);
}
return Brushes.Transparent;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
// we don't intend this to ever be called
return null;
}
Das Problem ist jetzt, dass der Konverter nur einmal aufgerufen wird. Ich meine, wenn ich das Programm starte und auf irgendeine Zeile klicke, wird der Converter aufgerufen. Wenn ich dann in eine andere Zeile klicke, wird DataGrid oder Control the Converter nicht aufgerufen.
Irgendeine Idee, wie man das repariert?