2015-04-01 3 views
0

Я хочу, чтобы фон моего окна WPF изменился в конкретной ситуации (но также может быть любым другим свойством). Предположим, что имя окна myWindow1. Если я обрабатываю окно так же, как и любой другой элемент (например, вы делали бы в Windows Forms), myWindow1, похоже, не имеет свойства Background для установки; только свойства только для чтения отображаются в автозаполнении. Если я попытаюсь создать новый объект следующим образом: myWindow1 w1 = new myWindow1(); , то w1, кажется, имеет все необходимые свойства для изменения в автозаполнении, включая фон, а в среде IDE отсутствуют ошибки. Но когда я пытаюсь запустить программу, она зависает.Изменение свойств окна в Visual C# из кода (WPF)

Что я делаю неправильно, и что является лучшей практикой для изменения свойств окон WPF из кода в Visual C# 2013?

+0

Вы уверены, что myWindow1 является экземпляром окна. Он должен иметь свойство фона. Также вы не можете написать new myWindow1() –

+0

, как вы можете использовать методы MyWindow1 без создания экземпляра? – user2526236

ответ

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. Вы не должны создать новый экземпляр одного и того же окна. Потому что он переопределяет ту, которую вы пытаетесь запустить.
    2.To достичь своей цели, я бы, вероятно, использовать фантазии анимации что-то вроде:

    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); 
    } 
    
+0

Я использовал ColorAnimation, но на сетке, как и пользователь2526236, предложил и достиг того, что хотел. Изменение свойства фона сетки было достаточно, но мне нужно было время, а затем вернуться к первому состоянию, поэтому анимации были полезны для управления потоком событий (animation.complete (function)). Тем не менее, мне интересно, можно ли редактировать свойства окна при загрузке окна и как это сделать. – didrocks66

+0

Да, вы можете. Помните, что есть экземпляр mainWindow, как только вы его создаете! вы можете сделать что-то вроде этого: 'this.width = 230;' – Gino

Смежные вопросы