我找到了一种方法来做到这一点。Krekkon 和 Visual Studio 扩展在评论中建议的链接的区别在于,
- 我正在使用 Visual Studio SDK 的 EnvironmentColors 和 VsBrushes 枚举(所以我无法执行 new SolidColorBrush(...))
- 我必须将其设置为动态资源,以便根据 Visual Studio 中选择的主题设置颜色
所以,我在转换器中的代码如下。
public class MessageBackgroundConverter : BaseConverter, IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values != null)
{
var postedByUserId = Guid.Parse(values[0].ToString());
var loggedInUserId = Guid.Parse(values[1].ToString());
var control = values[2] as Border;
if (control != null)
{
if (postedByUserId == loggedInUserId)
{
control.SetResourceReference(Border.BackgroundProperty, VsBrushes.CommandBarGradientKey);
return null;
}
control.SetResourceReference(Border.BackgroundProperty, VsBrushes.ToolWindowBackgroundKey);
return null;
}
}
return Brushes.Transparent;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
请注意,我正在使用 MultiValueConverter 并传递需要设置颜色的控件。这是因为为了设置我们需要使用的 DynamicResource
control.SetResourceReference(...);