以编程方式设置WPF背景Opacity

时间:2017-12-04 20:43:10

标签: c# wpf opacity

我正在处理应用程序,它为数据库中的每一行创建一个新的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

然而,我无法弄清楚它需要什么样的价值,而不仅仅是一个直线数字,没有什么比我能看到的画笔更像是没有像新的不透明度()

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

3 个答案:

答案 0 :(得分:6)

double肯定是“直线上升”;将鼠标悬停在属性上以查看数据类型。

问题(谢谢,Clemens)是你试图设置Brushes.Black的不透明度,这是一个系统对象而你没有做生意。

但您可以设置自己创建的Opacity的{​​{1}}。

要创建一个新的半透明白色画笔:

SolidColorBrush

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

或者只是保留现有画笔,如果你确信你没有从x.Background = new SolidColorBrush(Colors.White) { Opacity = 0.5 }; 获得它。

Brushes

如果你这样做,你可以从Background.Opacity = 0.5; 获得它:

System.Brushes

如果您这样做,则不会:

<Window
    Background="DeepSkyBlue"
    ...

DeepSkyBlue是<Window.Background><SolidColorBrush Color="DeepSkyBlue" /></Window.Background> ;你正在用这种颜色创建一个新的画笔。

您应该在XAML中使用绑定执行所有这些操作,而不是在C#中创建WPF控件。孩子,你会睁开眼睛。

但这是你的眼睛。

答案 1 :(得分:2)

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

您无法直接设置系统共享画笔的Opacity

您需要使用非共享SolidColorBrush,然后您才能设置Opacity

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

E.g:

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之间的双倍(如前所述)作为方法的第一个参数。

希望这有帮助。

答案 2 :(得分:2)

相当于XAML

<Border.BorderBrush>
    <SolidColorBrush Color="Black" Opacity="0.7"/>
</Border.BorderBrush>
代码背后的

将是

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

Brushes类中的预定义画笔(frozen)相比,上面的SolidColorBrush可以在以后随时更改,例如

moboBorder.Background.Opacity = 0.5;