【问题标题】:Bind Drawing.Color from settings with Style in XAML使用 XAML 中的样式将设置中的 Drawing.Color 绑定
【发布时间】:2013-07-23 21:18:34
【问题描述】:

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

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}}"/>

Background 属性是 System.Windows.Media.Color 类型,所以需要进行某种转换?

【问题讨论】:

  • 为什么不简单地创建System.Windows.Media.Color 类型的设置?只需在设置类型组合框中单击Browse...,然后选择 PresentationCore -> System.Windows.Media -> 颜色。
  • 嗯,很好。但是如何定义透明色呢?
  • @PatrikPolakovic 如果有任何答案可以解决您的问题,您可以将其标记为正确的..
  • @PatrikPolakovic 只需根据所需的不透明度或 alpha 值设置第一个字节。颜色字符串的结构是#AARRGGBB,因此例如#7FFF0000 为半透明红色。另见here
  • 除了dkozl已经回答的内容外,您还可以直接创建System.Windows.Media.SolidColorBrush类型的设置。

标签: c# wpf colors settings bind


【解决方案1】:

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

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

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

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

this link..希望对你有帮助..

【讨论】:

    【解决方案2】:

    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 变体。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      相关资源
      最近更新 更多