3

如何将设置中定义的颜色Bkg (System.Drawing.Color) 与 XAML 中的样式绑定?

xmlns:props="clr-命名空间:App.Properties"

<Style TargetType="{x:Type StackPanel}" x:Key="_itemStyle">
     <Setter Property="Background" Value="{Binding Path=Bkg, Source={x:Static props:Settings.Default}}"/>

背景属性是 System.Windows.Media.Color 类型的,所以它需要以某种方式转换?

4

3 回答 3

6

Panel.Backgroundproperty 是一种System.Windows.Media.Brush类型,System.Windows.Media.Color因此您需要将其转换为SolidColorBrush. 您可以在下面找到这两种情况:

设置是System.Windows.Media.Color类型

<Setter Property="Background">
   <Setter.Value>
      <SolidColorBrush Color="{Binding Source={x:Static props:Settings.Default}, Path=Bkg}"/>
   </Setter.Value>
</Setter>

设置是System.Drawing.Color类型:为此,您需要自定义IValueConverter将其转换为SolidColorBrush

public class ColorToBrushConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
      var dc = (System.Drawing.Color)value;
      return new SolidColorBrush(new Color { A = dc.A, R = dc.R, G = dc.G, B = dc.B });
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  {
      throw new NotImplementedException();
  }
}

您在资源中定义的:

<Window.Resources>
    <local:ColorToBrushConverter x:Key="ColorToBrushConverter"/>
</Window.Resources>

你可以像这样使用它:

<Setter Property="Background" Value="{Binding Source={x:Static props:Settings.Default}, Path=Bkg, Converter={StaticResource ColorToBrushConverter}}"/>
于 2013-07-24T12:44:57.087 回答
0

如您所知,背景属性是solidbrush 类型,因此只能使用某些solidbrush typw 属性设置或获取其值。所以你可以做的是在你的设置类中制作一个solidbrush类型的属性来代替这样的颜色。现在一切都很好..

 static SolidColorBrush brush = new SolidColorBrush(Colors.Red);

    public static SolidColorBrush colorBrush
    {
        get
        {
            return brush;
        }
    }

如果您不想这样做,那么您必须使用价值转换器..为此您可以遵循

这个链接..希望它可以帮助你..

于 2013-07-24T12:37:57.937 回答
0

只需创建一个 type 的设置System.Windows.Media.SolidColorBrush

Browse...从新设置的Type ComboBox 中选择,然后选择- PresentationCore> System.Windows.Media-> SolidColorBrush

您现在可以像以前一样直接使用该设置:

<Setter Property="Background"
        Value="{Binding Path=Bkg, Source={x:Static props:Settings.Default}}"/>
于 2013-07-24T13:45:14.047 回答