Вы можете создать другой конвертер, который будет преобразовывать текущий размер шрифта в кисть.Конвертер может выглядеть примерно так:
public class FontSizeToBrushConverter : IValueConverter {
public static readonly double Increment = 3;
public static readonly double MinFontSize = 6;
public static readonly double MaxFontSize = 32;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (value == null || value == DependencyProperty.UnsetValue) {
return DependencyProperty.UnsetValue;
}
var fontSize = (double) value;
double incrementsCount = MaxFontSize / Increment;
var defaultColor = new SolidColorBrush(Colors.Black);
for (int incrementIndex = 0; incrementIndex < incrementsCount; incrementIndex++) {
if (fontSize == MinFontSize + Increment * incrementIndex) {
switch (incrementIndex) {
case 0:
return new SolidColorBrush(Colors.Red);
case 1:
return new SolidColorBrush(Colors.Green);
case 2:
return new SolidColorBrush(Colors.Blue);
default:
return defaultColor; // Default color
}
}
}
return defaultColor; // Default color
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
Возможно, вы захотите переместить константы, определенные в верхней части этого класса, куда-нибудь, чтобы разделить их между вашими двумя конвертерами.
Используя этот конвертер, выXAML будет выглядеть так:
<DataTemplate x:Key="TagsTemplate">
<WrapPanel>
<TextBlock Text="{Binding Name, Mode=Default}"
TextWrapping="Wrap"
FontSize="{Binding ItemCount, Converter={StaticResource CountToFontSizeConverter}, Mode=Default}"
Foreground="{Binding FontSize, RelativeSource={RelativeSource Self}, Converter={StaticResource FontSizeToBrushConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</WrapPanel>
</DataTemplate>