通过C#代码创建和设置WPF窗口渐变背景
本文关键字:WPF 窗口 渐变 背景 设置 代码 创建 通过 | 更新日期: 2023-09-27 18:33:46
通过 C# 动态创建窗口我正在尝试为其分配渐变背景,但我无法通过 c# 代码重现 XAML
创建窗口(我试图删除尽可能多的不相关的代码)
static LinearGradientBrush backgroundLinearBrush = null;
static Window MsgBox(int parlnNum, string parflPath, string parMethodName, string Msgbx_Contnt)
{
var w_mbx = new Window(); w_mbx.Topmost = true;
w_mbx.Width = 1000; w_mbx.Height = 179;
//from an online example I tried adding the rectangle
// as the gradient owner- not sure if this is the way to go
Rectangle GradientRectangle = new Rectangle() { Width = w_mbx.Width, Height = w_mbx.Height };
if (backgroundLinearBrush == null)
{
GradientStopCollection gradientStopsLinearBrush = new GradientStopCollection();
gradientStopsLinearBrush.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#EF63BADF"), 0.0));
gradientStopsLinearBrush.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#E856B7C9"), 0.555));
gradientStopsLinearBrush.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#C543C0DB"), 0.333));
gradientStopsLinearBrush.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#E734ABDA"), 0.444));
gradientStopsLinearBrush.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#927FE2E2"), 0.777));
gradientStopsLinearBrush.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#E974CFC1"), 0.555));
gradientStopsLinearBrush.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#D076C5EB"), 0.275));
LinearGradientBrush backgroundLinearBrush = new LinearGradientBrush(gradientStopsLinearBrush)
{
StartPoint = new Point(0, 0.5),
EndPoint = new Point(1, 0.5)
};
GradientRectangle.Fill = backgroundLinearBrush;
}
然后在窗口内构造元素
Grid g = new Grid();
Grid.SetRow(GradientRectangle, 1);
Grid.SetColumn(GradientRectangle, 1);
StackPanel spM = new StackPanel();
TextBlock TblckErrMsg = new TextBlock();
TblckErrMsg.Name = "Tblck_ErrMsg";
TextBlock TblckLine = new TextBlock();
TblckLine.Name = "Tblck_Line";
TblckLine.Text = "[GoToError]";
TblckLine.MouseDown += new System.Windows.Input.MouseButtonEventHandler((s, e) => TblckLine_MouseDown(s, e, parflPath, parlnNum));
spM.Children.Add(TblckErrMsg);
spM.Children.Add(TblckLine);
g.Children.Add(spM);
w_mbx.Content = g;
return w_mbx;
}
我想这里有一些缺失的步骤,这是我无法达到要求的结果的原因。
为什么不为它做一个风格呢?基本上:
- 在 XAML 中定义样式,然后
-
myDynamicWindow.SetResourceReference(Window.Style, "NameOfDefinedStyle");
(相当于<Window Style="{DynamicResource NameOfDefinedStyle}"/>
)。
如果窗口有多个样式并且不想复制/粘贴模板,请定义一个样式,其中包含它们都应共享的属性,并使单个新样式基于原始样式。这可以通过以下语法完成:
<Style x:Key="WindowBase" TargetType="{x:Type Window}">
<!-- Shared properties -->
</Style>
<Style x:Key="DynamicWindowStyle" BasedOn="{StaticResource WindowBase}">
<!-- You can set a unique background gradient here -->
</Style>
注意:更改窗口的背景并不像更改网格那么简单。如果您没有模板来覆盖 Window 控件的默认值,请告诉我,我将发布一个完整的工作示例。