Entwickler-Ecke

WPF / Silverlight - Trigger für Canvas funktioniert nicht korrekt


FrEEzE2046 - Mi 10.03.10 11:29
Titel: Trigger für Canvas funktioniert nicht korrekt
Hallo,

ich hab einen Trigger über einen Style für Canvas definiert:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
               <Style TargetType="{x:Type Canvas}">
                    <Style.Triggers>
                         <Trigger Property="local:MainWindow.CanvasAmbient" Value="1">
                              <Setter Property="Background">
                                   <Setter.Value>
                                        <!--<RadialGradientBrush GradientOrigin="0.5, 0.5">
                                             <GradientStop Color="#FF1E68A1" Offset="0"/>
                                             <GradientStop Color="#00000000" Offset="0.5"/>
                                             <GradientStop Color="#FF1E68A1" Offset="1"/>
                                        </RadialGradientBrush>-->

                                        <SolidColorBrush Color="Azure"/>
                                   </Setter.Value>
                              </Setter>
                              <Setter Property="Width" Value="100"/>
                         </Trigger>
                    </Style.Triggers>
               </Style>


Mein Problem dabei ist, dass lediglich der zweite Setter "Width" ausgeführt wird. Die Farbe des Canvas bleibt hingegen gleich. Was mache ich falsch?


Kha - Mi 10.03.10 14:38

Dumm gefragt: Hat es denn eine Höhe :nixweiss: ?
Canvas schert sich nicht wirklich um seine Größe, es zeigt auch Children außerhalb seiner eigentlichen Fläche an. Hab schon öfters ein Canvas-Element mit Höhe und Breite 0 benutzt ;) .


FrEEzE2046 - Mi 10.03.10 15:39

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Dumm gefragt: Hat es denn eine Höhe :nixweiss: ?


Hi,

da hast du micht falsch verstanden. Der Code - den nich nur zum Testen eingefügt habe - mit dem Width funktioniert ja. Ich bekomme es aber nicht hin den Background zu füllen.

Irgendeine Idee?


Kha - Mi 10.03.10 19:59

Ich meinte damit, ob die Canvas überhaupt eine sichtbare Fläche besitzt, in der der Hintergrund zu sehen ist. Wenn sie aber schon vor dem Trigger einen erkennbaren eigenen Hintergrund hatte, dann fällt mir spontan nur noch eine Möglichkeit ein: Wird der Wert vielleicht durch einen aus einer anderen Quelle verdeckt (Dependency Property Value Precedence [http://msdn.microsoft.com/en-us/library/ms743230.aspx])?


FrEEzE2046 - Mi 10.03.10 21:30

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Wird der Wert vielleicht durch einen aus einer anderen Quelle verdeckt (Dependency Property Value Precedence [http://msdn.microsoft.com/en-us/library/ms743230.aspx])?


Denke ich nicht, da das explizite - manuelle - setzen des Background-Property ja auch funktioniert. Keine Ahnung woran es liegt.


Kha - Mi 10.03.10 21:47

Das muss ja nicht unbedingt etwas heißen, denn ein "lokaler Wert" hat eben eine höhere Priorität als ein Style-Setter ;) . Zum Ermitteln der Quelle könntest du DependencyPropertyHelper.GetValueSource oder gleich Mole [http://karlshifflett.wordpress.com/mole-for-visual-studio/] benutzen.
Ansonsten müsstest du mal versuchen, den Code in ein selbstständiges Beispiel auszulagern, langsam gehen mir auch die Ideen aus.