J'essaie de définir le SystemColors.HighlightBrushKey toujours un peu plus sombre que l'arrière-plan de la ligne sélectionnée. Par conséquent im en utilisant ce code:Comment faire pour définir le SystemColors.HighlightBrushKey dans WPF avec un convertisseur
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;
}
}
}
Le problème est que le convertisseur ne sera jamais appelé ... Est-ce que quelqu'un sait comment définir l'arrière-plan de la ligne sélectionnée un peu plus sombre qu'elle ne l'était avant de le sélectionner?
Toute aide est appréciée!
Mise à jour
Il ressemble à son travail, mais malheureusement pas tout à fait. J'ai corrigé le convertisseur pour ressembler à ceci:
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;
}
Maintenant, le problème est que le convertisseur n'est appelé une fois. Je veux dire que si je démarre le programme et que je clique sur une ligne, le convertisseur est appelé. Si je clique ensuite sur une autre ligne, DataGrid ou contrôle le convertisseur n'est pas appelé.
Une idée Comment résoudre ce problème?