Controls durchlaufen in WPF

03/02/2009 - 22:08 von Alexander Billner | Report spam
Hallo zusammen,

ich möchte für alle Controls einer WPF-Page Eigenschaften setzen, z.B. die
Hintergrundfarbe. Ich beschàftige mich erst seit kurzem mit WPF und mache
das bis jetzt so:

In theButton_Click:

[...]
DependencyObject window = LogicalTreeHelper.GetParent(sender as
FrameworkElement);

foreach(DependencyObject obj in LogicalTreeHelper.GetChildren(window as
FrameworkElement))
{
if (Object.ReferenceEquals(obj.GetType(),theButton.GetType()))
{
Button theButton2 = obj as Button;
theButton2.Background = Brushes.Red;
}
}
[...]

Geht das schneller und besser?

Danke und viele Grüße,
Alex
 

Lesen sie die antworten

#1 Elmar Boye
04/02/2009 - 09:15 | Warnen spam
Hallo Alexander,

Alexander Billner schrieb:
Hallo zusammen,

ich möchte für alle Controls einer WPF-Page Eigenschaften setzen,
z.B. die Hintergrundfarbe.



Um Elemente zu veràndern, solltest Du weniger Code schreiben,
als die Möglichkeiten von WPF nutzen.
Um Eigenschaften anzupassen, ohne im einzelnen jedes Element
anzusprechen, bieten sich Ressourcen an:
<URL:http://msdn.microsoft.com/de-de/lib...8.aspx>
"Ressourcen (WPF)"

Und das kann über Styles und Trigger bis zum Exzeß ausgebaut
werden, ohne nur eine Zeile Code zu schreiben.

Schau Dir mal die Artikelserien auf Codeproject von Josh Smith
http://www.codeproject.com/KB/WPF/G...WPF_1.aspx
und Sacha Barber
<URL:http://www.codeproject.com/KB/WPF/B...1.aspx>

Ein kleines Beispiel für den Hintergrund:

<!-- XAML: -->
<Window x:Class="Wpf1.Window1"
xmlns="http://schemas.microsoft.com/winfx/...tion"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Button Ressourcen" Height="300" Width="300">
<Window.Resources>
<SolidColorBrush x:Key="ButtonBackgroundBrush" Color="LightBlue"/>
</Window.Resources>
<StackPanel>
<!-- Statisch -->
<Button Background="{StaticResource ButtonBackgroundBrush}"
Content="Statische Farbe"/>
<!--Ändert sich mit Änderung der Ressource -->
<Button Background="{DynamicResource ButtonBackgroundBrush}"
Content="Dynamische Farbe" />
<!-- Systemfarbe -->
<Button Background="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}"
Content="Windows Farbe" />

<Button x:Name="ChangeColorButton"
Margin="0,16"
Content="Farbe Ändern" Click="ChangeColorButton_Click"/>
</StackPanel>
</Window>

<!-- Code-Behind: -->
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}

private void ChangeColorButton_Click(object sender, RoutedEventArgs e)
{
this.Resources["ButtonBackgroundBrush"] = new SolidColorBrush(Colors.Red);

}
}

Ähnliche fragen