Hallo,
ich hätte eine Frage bzgl. VisualStates in WPF. Ich habe ein ControlTemplate, das wie folgt definiert ist:
<ControlTemplate TargetType="{x:Type RadioButton}">
<Border>
<ContentPresenter />
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Color" To="Red" />
</Storyboard>
</VisualState>
<VisualState x:Name="Normal" />
<VisualState x:Name="Pressed" />
<VisualState x:Name="Disabled" />
</VisualStateGroup>
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked">
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Color" To="Yellow" />
</Storyboard>
</VisualState>
<VisualState x:Name="Unchecked" />
<VisualState x:Name="Indeterminate" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Border>
</ControlTemplate>
Ich habe nun folgendes Problem, wenn ich mit der Maus über den selektierten RadioButton fahre, wird dieser gelb. Doch wenn ich mit der Maus den RadioButton wieder "verlasse", wird dieser nicht mehr rot. Dies müsste er aber wieder werden, da der RadioButton ja selektiert ist.
Wie kann man mit VisualState dies bewerkstelligen?
Viele Grüße
Quaneu
Hallo,
bin jetzt nicht der WPF Fachmann und hab schon ein bisschen länger nichts mehr mit WPF gemacht.
Wenn ich das noch recht im Kopf habe, musst du dazu 2 VisualState machen ( MouseEnter / MouseLeave ) in denen du dann die beiden Farben angeben kannst.
Grüße
Stephan
Mach das lieber über den Triggers, so lange du kein SL Programmierst bist du auf diese krüppeligen VisualStates nicht angewiesen.
Hier das was du suchst, ohne das du das MouseLeft o.ä. noch implementieren musst.
<ControlTemplate TargetType="{x:Type RadioButton}">
<Border>
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" Value="Yellow" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Vielen Dank für eure Hilfe.
Dann werde ich wieder auf die Trigger zurückgreifen, da ich nicht vorhabe die Anwendung auch in SL laufen zu lassen.
Viele Grüße
Quaneu
So jetzt hab ich leider gleich die nächste Frage...
Ich versteh nämlich folgendes Verhalten überhaupt nicht...
Das ControlTemplate sieht nun wie folgt aus:
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="_border"
Storyboard.TargetProperty="Background.Color" To="Red" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="_border"
Storyboard.TargetProperty="Background.Color" To="DarkGray" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="_border"
Storyboard.TargetProperty="Background.Color" To="Yellow" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="_border"
Storyboard.TargetProperty="Background.Color" To="DarkGray" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
Also ich würde gern folgendes haben bei IsMouseOver und IsChecked soll der Hintergrund "Yellow" sein. Ist nur IsMouseOver dann "Red". Bei keinem von beiden, dann "DarkGray".
Bei dem ControlTemplate von oben funktioniert dies leider nicht wie gewünscht. Wenn ich die Maus über einen RadioButton bewegen wird er "Red"und wenn ich ihn verlasse wieder "DrakGray". Wenn ich einen anklicke, wird er "Yellow". Soweit so so gut. Doch wenn ich nun die Maus über einen RadioButton der schon mal angeklickt war bewege, dann bleibt dieser "DarkGray". Und dies verstehe ich gar nicht...
Was mache ich denn falsch?
Viele Grüße
Quaneu