Итак, у вас есть два варианта здесь.Я думаю, что вы просите о первом.Я установил два свойства в своем viewmodel
- одно для массива цветов, а затем одно для индекса, который я хочу использовать.Я binding
им через MultiConverter
, чтобы вернуть правильный цвет из массива.Это позволит вам обновлять выбранный вами индекс во время выполнения и менять фон на новый выбранный цвет.Если вам просто нужен статический индекс, который никогда не изменяется, вы должны использовать инструмент IValueConverter
вместо IMultiValueConverter
, а затем передать индекс с помощью свойства ConverterParameter
.
В качестве примечания явыбран для реализации массива типа Color
.SolidColorBrush
объекты являются дорогостоящими, и их использование поможет уменьшить эти затраты.
public class ViewModel : INotifyPropertyChanged
{
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
private Color[] _backgroundColours = new Color[] { Colors.AliceBlue, Colors.Aqua, Colors.Azure };
public Color[] BackgroundColours
{
get => _backgroundColours;
set
{
_backgroundColours = value;
OnPropertyChanged();
}
}
private int _backgroundIndex = 1;
public int ChosenIndex
{
get => _backgroundIndex;
set
{
_backgroundIndex = value;
OnPropertyChanged();
}
}
}
...
public class BackgroundConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var backgroundColours = values[0] as Color[];
var chosenIndex = (int)values[1];
return new SolidColorBrush(backgroundColours[chosenIndex]);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
...
<Grid>
<Grid.DataContext>
<local:ViewModel />
</Grid.DataContext>
<Grid.Resources>
<local:BackgroundConverter x:Key="backgroundConverter"/>
</Grid.Resources>
<TextBox>
<TextBox.Background>
<MultiBinding Converter="{StaticResource backgroundConverter}">
<Binding Path="BackgroundColours" />
<Binding Path="ChosenIndex" />
</MultiBinding>
</TextBox.Background>
</TextBox>
</Grid>