以编程方式设置 WPF 背景不透明度

Setting WPF background Opacity programmatically

我正在开发为数据库中的每一行创建一个新的 wpf 边框组件的应用程序。这意味着我必须在 C# 中设置边框组件的样式,而不是 XAML(据我所知)。到目前为止,除了尝试设置背景不透明度外,样式都很好。

motherboards.Add(new Border());
Border moboBorder = motherboards[i];
moboBorder.Width = 150;
moboBorder.Height = 150;
moboBorder.BorderBrush = Brushes.Black;
moboBorder.Background = Brushes.White;
moboBorder.CornerRadius = new CornerRadius(10);
moboBorder.Margin = new Thickness(5);
moboBorder.BorderThickness = new Thickness(1);

您可以像这样在XAML中调整背景不透明度

<Border BorderThickness="1" Height="100" Width="100">
    <Border.BorderBrush>
        <SolidColorBrush Color="Black" Opacity="0.7"/>
    </Border.BorderBrush>
</Border>

但正如我所说,我是用 C# 创建组件而不是 XAML。我想这就是你在 c#

中设置值的方式
moboBorder.Background.Opacity = //Value

但是,我无法弄清楚它需要什么样的值,不仅仅是一个直接的数字,没有我能看到的画笔,也没有像 = new Opacity()

我试过谷歌搜索,但一切都是关于设置整个元素的不透明度,而不仅仅是它的背景。

一个double肯定是一个"straight up number";将鼠标悬停在 属性 上以查看数据类型。

问题(感谢 Clemens)是您试图设置 Brushes.Black 的不透明度,这是一个系统 object,而您无权这样做。

但是您可以设置您自己创建的 SolidColorBrushOpacity

新建semi-opaque白色笔刷:

x.Background = new SolidColorBrush(Colors.White) { Opacity = 0.5 };

请参阅 Geoff 的回答,了解如何从 RGB 三元组(或 ARGB 四元组)而不是命名颜色创建颜色。

或者只保留现有的画笔,如果你确信你不是从Brushes那里得到它的。

Background.Opacity = 0.5;

如果你这样做了,你是从 System.Brushes:

得到的
<Window
    Background="DeepSkyBlue"
    ...

如果你这样做了,你就没有:

<Window.Background><SolidColorBrush Color="DeepSkyBlue" /></Window.Background>

深天蓝是Colors.DeepSkyBlue;您正在创建具有该颜色的新画笔。

您应该在 XAML 中使用绑定完成所有这些操作,而不是在 C# 中创建 WPF 控件。你会射出你的眼睛的,孩子。

但这是你的眼睛。

正如@Clemens 在评论中亲切指出的那样:

不能直接设置系统共享笔刷的Opacity

您需要使用非共享 SolidColorBrush,然后您就可以设置 Opacity

您可以从代码中的任何位置更改 Opacity

例如:

moboBorder.Background = new SolidColorBrush(Color.FromRgb(255, 0, 0))
                        {
                            Opacity = 0.5 // or whatever opacity between
                                          //  0.0 (0%) and 1.0 (100%)
                        };

moboBorder.Background = new SolidColorBrush(Color.FromRgb(255, 0, 0));
moboBorder.Background.Opacity = 0.5;

与上述示例类似,如果您使用的是 RGB,您还可以设置 alpha(不透明度)。

您可以使用 Color.FromArgb() 静态方法,而不是:

moboBorder.Background = new SolidColorBrush(Color.FromArgb(0.5, 255, 0, 0));

只需在 0.01.0 之间使用一个双精度数(和以前一样),作为该方法的第一个参数。


希望这对您有所帮助。

相当于XAML

<Border.BorderBrush>
    <SolidColorBrush Color="Black" Opacity="0.7"/>
</Border.BorderBrush>

后面的代码是

moboBorder.Background = new SolidColorBrush
{
    Color = Colors.Black,
    Opacity = 0.7
};

相对于Brushesclass中预定义的Brushes(即frozen),上面的SolidColorBrush以后可以随时更改,如

moboBorder.Background.Opacity = 0.5;