Кнопка Wpf как с раскадровкой datatrigger, так и с наведением мыши

Я стремлюсь реализовать эту функциональность: кнопка, связанная с командой, которая может сигнализировать, была ли команда успешной в форме красной или зеленой вспышки. В то же время я хочу, чтобы кнопка выглядела как другие кнопки.

Вот код, который у меня есть сейчас:

 <Button IsEnabled="{Binding EmptyingAllowed}" Content="Töm lista" Foreground="#555555" FontWeight="SemiBold" Height="20" Width="65" Command="{Binding EmptyListCommand}" >
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border BorderBrush="#BBBBBB" Padding="1" BorderThickness="0,0,1,1" Background="#DDDDDD">
                                    <Grid Background="{TemplateBinding Background}">
                                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                                    </Grid>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ClearedOk}" Value="Ok">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimation AccelerationRatio="0.2" DecelerationRatio="0.01" AutoReverse="True" Duration="0:0:1" To="LawnGreen" Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ClearedOk}" Value="Error">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimation  AccelerationRatio="0.2" DecelerationRatio="0.01" AutoReverse="True" Duration="0:0:1" To="Red" Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>

Когда команда выполняется, ClearedOk устанавливается в "Ok" или "Error", а затем в "Empty", это вызывает искомую вспышку, к сожалению, обычный эффект mouseOver по какой-то причине теряется, и если я добавьте mouseOver-триггер, он всегда имеет приоритет над мигающим эффектом, то есть вспышка видна только при нажатии кнопки, а не mouseOver:ed.

Есть ли этому решение?

1 ответ

Попробуйте создать таблицу данных и модель со свойствами состояния, а затем привязать шаблон к этим свойствам.

 <DataTemplate x:Key="DataTemplate">
        <Grid >
            <Ellipse Stroke="White"
                     StrokeThickness="5"
                     Fill="{Binding State, Converter={StaticResource CheckToColorConverter}}"/>
        </Grid>
    </DataTemplate>
Другие вопросы по тегам