创建&;通过c#代码设置wpf窗口渐变背景

创建&;通过c#代码设置wpf窗口渐变背景,c#,wpf,user-controls,C#,Wpf,User Controls,通过C#动态创建一个窗口,我试图给它指定一个渐变背景,但我无法通过C#代码复制XAML 创建窗口(我尝试删除尽可能多的无关代码) 然后在窗口中构建元素 Grid g = new Grid(); Grid.SetRow(GradientRectangle, 1); Grid.SetColumn(GradientRectangle, 1); StackPanel spM = new StackPanel(); TextBlock TblckErrMsg = new TextBlock(); Tbl

通过C#动态创建一个窗口,我试图给它指定一个渐变背景,但我无法通过C#代码复制XAML

创建窗口(我尝试删除尽可能多的无关代码)

然后在窗口中构建元素

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”)(相当于
如果您有多个窗口样式,并且不想复制/粘贴模板,请定义一个样式,其中包含所有样式都应共享的特性,并基于原始样式创建单个新样式。这可以通过以下语法完成:

<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>


注意:更改窗口背景并不像更改网格背景那样简单。如果您没有模板来覆盖窗口控件的默认设置,请告诉我,我将发布一个完整的工作示例。

为什么不为它创建一个样式?基本上:

  • 在XAML中定义样式,然后
  • myDynamicWindow.SetResourceReference(Window.Style,“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>

注意:更改窗口背景并不像更改网格背景那样简单。如果您没有模板覆盖窗口控件的默认值,请告诉我,我将发布完整的工作示例