从代码隐藏(WPF)更改Visual C#中的窗口属性

时间:2015-04-01 17:37:09

标签: c# wpf visual-studio-2013 window code-behind

我希望WPF窗口的背景在特定情况下更改(但也可以是任何其他属性)。我们假设窗口的名称是myWindow1。如果我像对待任何其他项一样对待窗口(就像在Windows窗体中那样),myWindow1似乎没有要设置的Background属性;只有只读属性才会显示在自动完成中。如果我尝试创建这样的新对象: myWindow1 w1 = new myWindow1(); 然后w1似乎具有可用于更改自动完成的所有正确属性,包括后台,并且IDE显示没有错误。但是当我尝试启动程序时,它会挂起。

我做错了什么,在Visual C#2013中从代码隐藏更改WPF窗口属性的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

尝试从XAML执行此操作。

< Window x:Class="WPF1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" >
<Grid Background="{DynamicResource {x:Static SystemColors.InactiveCaptionTextBrushKey}}">

</Grid>

这也是动态资源

<Window x:Class="WPF1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Background="{DynamicResource WindowBrush}"
    Title="MainWindow" Height="350" Width="525" >
 <Window.Resources>
<SolidColorBrush x:Key="WindowBrush" Color="LightGray"/>
 </Window.Resources>
<Grid >
  </Grid>
 </Window>

也可以使用静态资源

答案 1 :(得分:1)

  1. 您不应该创建相同窗口的新实例。因为它会覆盖您尝试启动的那个 为了实现你的目标,我可能会使用类似的动画:

    function changeBGColor(this migth be an event handler)
    {
             Storyboard sb=new storyboard();
             ColorAnimation ca=new ColorAnimation();
             ca.From = Colors.Teal;
             ca.By = Colors.Green;
             ca.To = Colors.YellowGreen;
             ca.Duration = new Duration(TimeSpan.FromSeconds(1.5));
             Storyboard.SetTargetProperty(ca, new PropertyPath("(Background.BackgroundBrus).(SolidColorBrush.Color)"));
             myWindow1.beginStoryboard(sb);
    }