Вы могли заметить, что количество параметров, которые вы можете передать в Converter, равно 1. Вы можете передать массив строк или что-то еще, но я считаю, что было бы проще записать все ваши аргументы в одной строке и ручка. Например: "Empty=White|Filled=Black|Unknown=Gray"
Ваш конвертер должен выглядеть так:
public class SquareConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string arg && parameter is string str)
{
string[] splits = str.Split("|"); // split by the delimiter
var colorConverter = new ColorConverter(); // required to convert invariant string to color
foreach (var kv in splits)
{
if(kv.StartsWith(arg, StringComparison.OrdinalIgnoreCase))
{
var v = kv.Split("=")[1]; // get the value from key-value
var color = (Color)colorConverter.ConvertFromInvariantString(v); // convert string to color
var brush = new SolidColorBrush(color); // convert color to solid color brush
return brush;
}
}
}
return default;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
в вашем xaml
xmlns:c="clr-namespace:WpfApp.Converters"
<Window.Resources>
<c:SquareConverter x:Key="SquareConverter"/>
</Window.Resources>
<Rectangle Fill="{Binding Path=Contents.Value,
Converter={StaticResource SquareConverter},
ConverterParameter='Empty=White|Filled=Black|Unknown=Gray'}"/>