我試圖做一個RoutedEvent激活ColorAnimation在TextBlock
的背景和Panel
內Buttons
。我的目標是在使用MouseEnter和MouseLeave RoutedEvents時更改TextBlock的前景和麪板的背景。WPF - 觸發改變前景和多個按鈕的對象
下面的代碼實際上工作。但是,只有當鼠標光標在這兩個對象之一上時纔有效(這是有道理的)。
我想不出我應該怎麼做才能激活兩個ColorAnimations當鼠標移動到按鈕(特別是如果它不是在Panel
或TextBlock
)
這裏是一個實例的按鈕看起來像正常:
這是如何按鈕看起來像當我專注ŧ他
Panel
:這是
Button
的樣子,當我專注自己(的按鈕背景具有的顏色與面板的背景與文本塊的前景一樣)而且這是按鈕應該看起來像當鼠標在按鈕上時的樣子
<UserControl.Resources>
<Style x:Key="Path" TargetType="Path">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" To="White" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" To="Gray" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
<Style x:Key="TextBlock" TargetType="TextBlock">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" To="White" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" To="Gray" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Button Name="btnTest"
BorderThickness="0"
Width="200"
Height="200"
Margin="5,5,0,0"
VerticalAlignment="Top"
>
<Button.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="Gray"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
<StackPanel>
<Path Style="{StaticResource Path}" Fill="Gray"
Stretch="Fill" Width="98.851" Height="94.776"
Data="M819.2,0H204.8C92,0,0,92.2,0,204.8v614.4C0,931.8,92,1024,204.8,1024h614.4c112.6,0,204.8-92.2,204.8-204.8V204.8 C1024,92.2,931.8,0,819.2,0z M879,337.8l-15.8,93L774.6,463.6L702,403.4l15.8-93.2l88.4-33L879,337.8z M786.2,594.8 c-61.601,22.8-129,7-180-35.399L217.8,831.2L128,702.8L528,423c-16.8-95.2,28.6-188.4,112.8-219.6c56.2-20.8,117.2-9.6,166.2,25 l-136,50.4L646.6,424L760,518l136-50.4C881.2,525.6,842.4,574,786.2,594.8z"
/>
<TextBlock Style="{StaticResource TextBlock}" Margin="0,20,0,0" FontSize="15" FontWeight="Bold" Foreground="Gray" HorizontalAlignment="Center">
TEST
</TextBlock>
</StackPanel>
</Button>
編輯1 我測試艾哈邁德的代碼,並將其部分工作。當我的光標位於Button
時,DataTrigger有效。但是,當我離開它(IsMouseOver = FALSE)的Path
填寫和TextBlock
前景沒有變回: OBS:我不得不添加DataTrigger.EnterActions避免以下錯誤信息:
類型'BeginStoryBoard'的值不能添加到'SetterBaseCollection'類型的集合或 字典中。
<UserControl.Resources>
<Style x:Key="Path" TargetType="Path">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Button},Path=IsMouseOver}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" To="White" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Button},Path=IsMouseOver}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" To="Gray" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="TextBlock" TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Button},Path=IsMouseOver}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" To="White" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Button},Path=IsMouseOver}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" To="Gray" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
您好艾哈邁德! 感謝您的回答 –
我編輯了我的帖子,與艾哈邁德的建議分享了代碼結果,但沒有像我期望的那樣工作。 –
你可以強調什麼沒有按預期工作! – Ahmad