C# 在IValueConverter中使用EnvironmentColor.ToolWindowTextBrushKey
我正在使用XAML中的类设置标签控件的前景,如下所示。请注意,我在这里使用的是笔刷C# 在IValueConverter中使用EnvironmentColor.ToolWindowTextBrushKey,c#,wpf,ivalueconverter,C#,Wpf,Ivalueconverter,我正在使用XAML中的类设置标签控件的前景,如下所示。请注意,我在这里使用的是笔刷 但是,我想使用IValueConverter设置此颜色以决定要设置的颜色。但我不知道如何从转换器返回相同的内容。你能告诉我这是可以做到的吗?我找到了一个方法。Krekkon和Visual Studio extensions在评论中建议的链接的区别在于 我正在使用Visual Studio SDK的EnvironmentColor和VSBrush枚举(因此我无法使用新的SolidColorBrush(…) 我必
但是,我想使用IValueConverter设置此颜色以决定要设置的颜色。但我不知道如何从转换器返回相同的内容。你能告诉我这是可以做到的吗?我找到了一个方法。Krekkon和Visual Studio extensions在评论中建议的链接的区别在于
- 我正在使用Visual Studio SDK的EnvironmentColor和VSBrush枚举(因此我无法使用新的SolidColorBrush(…)
- 我必须将其设置为动态资源,以便根据VisualStudio中选择的主题设置颜色
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();
}
}
请注意,我使用的是多值转换器,并传递需要设置颜色的控件。这是因为对于设置DynamicSource,我们需要使用
control.SetResourceReference(...);
请检查答案或向我们添加更多帮助