在XAML中将设置中的Drawing.Color与Style绑定

3
如何将在设置中定义的 Color Bkg (System.Drawing.Color) 与 XAML 中的 Style 绑定? xmlns:props="clr-namespace: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类型的,因此需要进行某种转换?


为什么不直接创建一个类型为System.Windows.Media.Color的设置呢?只需在“设置类型”组合框中单击“浏览...”,然后选择PresentationCore -> System.Windows.Media -> Color即可。 - Clemens
嗯,不错。但是如何定义透明颜色? - Patrik Polakovic
@PatrikPolakovic 如果有任何答案解决了你的问题,你可以将其标记为正确的答案。 - loop
@PatrikPolakovic 只需根据所需的不透明度或 alpha 值设置第一个字节。颜色字符串的结构是 #AARRGGBB,例如 #7FFF0000 是半透明红色。此外,请参见 此处 - Clemens
@PatrikPolakovic 我认为你已经得到了答案,所以无论哪个解决了你的问题,你至少可以将其标记为正确的。 - loop
显示剩余2条评论
3个回答

7

Panel.Background 属性是 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}}"/>

谢谢,我使用了System.Windows.Media.Color变量。 - Patrik Polakovic

0

你会知道,背景属性是solidbrush类型的,因此它的值只能使用一些solidbrush类型的属性来设置或获取。所以你可以在设置类中像这样创建一个solidbrush类型的属性来代替颜色...现在一切都运作得很好。

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

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

如果你不想这样做,那么你就得使用值转换器..为此,你可以按照这个链接this link..希望能帮到你..

0

只需创建一个类型为System.Windows.Media.SolidColorBrush的设置。

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接