0

我正在使用XAML 中的EnvironmentColors类设置标签控件的前景,如下所示。请注意,我在这里使用的是 BrushKey。

<Label Content="System Tray Notifications" Grid.Row="0" VerticalAlignment="Center" Padding="0" Foreground="{DynamicResource {x:Static vsui:EnvironmentColors.ToolWindowTextBrushKey}}"/>

但是,我想使用 IValueConverter 设置此颜色来决定要设置的颜色。但我不知道我应该如何从 Converter 中返回相同的内容。你能告诉我它可以做到吗?

4

1 回答 1

0

我找到了一种方法来做到这一点。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(...);
于 2013-12-19T04:49:45.780 回答