以编程方式设置 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,而您无权这样做。
但是您可以设置您自己创建的 SolidColorBrush
的 Opacity
。
新建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.0
和 1.0
之间使用一个双精度数(和以前一样),作为该方法的第一个参数。
希望这对您有所帮助。
相当于XAML
<Border.BorderBrush>
<SolidColorBrush Color="Black" Opacity="0.7"/>
</Border.BorderBrush>
后面的代码是
moboBorder.Background = new SolidColorBrush
{
Color = Colors.Black,
Opacity = 0.7
};
相对于Brushes
class中预定义的Brushes(即frozen),上面的SolidColorBrush以后可以随时更改,如
moboBorder.Background.Opacity = 0.5;
我正在开发为数据库中的每一行创建一个新的 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,而您无权这样做。
但是您可以设置您自己创建的 SolidColorBrush
的 Opacity
。
新建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.0
和 1.0
之间使用一个双精度数(和以前一样),作为该方法的第一个参数。
希望这对您有所帮助。
相当于XAML
<Border.BorderBrush>
<SolidColorBrush Color="Black" Opacity="0.7"/>
</Border.BorderBrush>
后面的代码是
moboBorder.Background = new SolidColorBrush
{
Color = Colors.Black,
Opacity = 0.7
};
相对于Brushes
class中预定义的Brushes(即frozen),上面的SolidColorBrush以后可以随时更改,如
moboBorder.Background.Opacity = 0.5;