XAML 按下按钮时 Flink /关闭的标签

knpiaxh1  于 2023-06-03  发布在  Flink
关注(0)|答案(2)|浏览(245)

抱歉问了个基本问题。
我想创建一个UI,当在WPF应用程序中按下按钮时,使标签 Flink /关闭。
我能够使标签 Flink 时,屏幕开始,但我有麻烦弄清楚如何通知标签时,按下按钮。
1.我创建了 Flink 标签的XAML作为BlinkingLabel. xaml。
我将此文件的构建操作更改为resource。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Storyboard x:Key="FlashStory">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" RepeatBehavior="Forever" AutoReverse="True">
        <LinearDoubleKeyFrame KeyTime="0:0:0.2" Value="1" />
        <LinearDoubleKeyFrame KeyTime="0:0:0.8" Value="0" />
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

<Style TargetType="Label" x:Key="LabelFlash">
    <Style.Triggers>
        <EventTrigger RoutedEvent="Label.Loaded">
            <BeginStoryboard Storyboard="{StaticResource FlashStory}" />
        </EventTrigger>
    </Style.Triggers>
</Style>

2.我指定可以引用App. xaml中创建的BlinkingLabel.xaml。

<Application x:Class="WpfApp2.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:WpfApp2"
         StartupUri="MainWindow.xaml">
<Application.Resources>
    <ResourceDictionary Source="BlinkingLabel.xaml" />
</Application.Resources>

3.我写的MainWindow.xaml是这样的。

<Window x:Class="WpfApp2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp2"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>


        <Label x:Name="lblMessage"
               Content="connecting"
               Grid.Column="1"
               Foreground="White"
               FontSize="22" 
               Background="LightBlue"
               HorizontalContentAlignment="Center"
               VerticalContentAlignment="Center"
               Height="40"
               Style="{StaticResource LabelFlash}" />

        <Button Click="ConnectStart"
                Content="Start"
                Grid.Column="1"
                Grid.Row="1"
                Height="40">
        </Button>

        <Button Click="ConnectStop"
                Content="Stop"
                Grid.Column="1"
                Grid.Row="2"
                Height="40">
        </Button>
    </Grid>
</Grid>

由于Label.Loaded是在BlinkingLabel.xaml中指定的,我发现 Flink 是在屏幕启动时开始的。
但是,我希望这个部分在按钮被按下时 Flink ,但我很担心,因为我不知道如何指定标签以外的事件(如button.click)。
如何触发另一个元素的状态?
对不起,我的英语很差。
请给予我一些建议。

zu0ti5jz

zu0ti5jz1#

一个简单的方法是只将 Flink 样式应用于按钮的单击处理程序中的标签,因此在此之前它将表现为普通标签。这是CSS中的典型做法,添加类来更改动画。
一种更健壮的方法是实现一个具有IsBlinking属性的label子类,并在样式中将其用作条件,以便仅在动画打开时运行动画。然后在按钮单击处理程序中,只需将属性设置为true,就可以看到神奇的事情发生了。

q43xntqr

q43xntqr2#

以下是如何停止和启动使用<BeginStoryboard> XAML元素启动的Storyboard

private void ConnectStop(object sender, RoutedEventArgs e)
{
    lblMessage.BeginAnimation(Label.OpacityProperty, null);
}

private void ConnectStart(object sender, RoutedEventArgs e)
{
    ConnectStop(sender, e);
    Storyboard sb = this.FindResource("FlashStory") as Storyboard;
    if (sb != null)
    {
        lblMessage.BeginStoryboard(sb);
    }
}

相关问题