故事板触发器仅适用于第二个条件一次。

3

我有一个按钮,当点击时,TextBlock MultiDataTrigger 运行,但是每次点击按钮它只运行两次。

说明:首先默认的 TextBlock 文本会被断开连接,然后有两个 MultiDataTriggers,满足条件的会运行,再次点击按钮会触发另一个 MultiDataTrigger,但此后没有任何 Storyboard 动画工作。

文本块

<TextBlock x:Name="abctxt" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Center" Text="Disconnected">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=sbbtn, Path=IsPressed}" Value="True" />
                        <Condition Binding="{Binding ElementName=abctxt, Path=Text}" Value="Connected" />
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource DisconnectedTextChange}"/>
                    </MultiDataTrigger.EnterActions>
                </MultiDataTrigger>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=sbbtn, Path=IsPressed}" Value="True" />
                        <Condition Binding="{Binding ElementName=abctxt, Path=Text}" Value="Disconnected" />
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource ConnectedTextChange}"/>
                    </MultiDataTrigger.EnterActions>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

按钮

<Button x:Name="sbbtn" />

Storyboard

<Storyboard x:Key="ConnectedTextChange" x:Name="ConnectedTextChange">
    <StringAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Text)" AccelerationRatio="1">
        <DiscreteStringKeyFrame KeyTime="0:0:0.8" Value="Connected"/>
    </StringAnimationUsingKeyFrames>
</Storyboard>

<Storyboard x:Key="DisconnectedTextChange" x:Name="DisconnectedTextChange">
    <StringAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Text)" AccelerationRatio="1">
        <DiscreteStringKeyFrame KeyTime="0:0:0.8" Value="Disconnected"/>
    </StringAnimationUsingKeyFrames>
</Storyboard>

似乎 ConnectedTextChange Storyboard 将文本保持为“Connected”,因此其他 Storyboard 无法将其更改回“Disconnected”。 - kennyzx
@kennyzx 试过这个了吗?有什么建议,我该怎么做? - Code Learner
你必须使用动画(Storyboard)吗?还是只想在按钮点击时更改文本?默认情况下,Storyboard 在完成后保持最终值。 - kennyzx
@kennyzx 不行!我必须使用Storyboard,实际上我还有另一个控件(矩形通过Storyboard滑过边距),它也具有与TextBlock相同的条件,但是TextBlock和矩形都只启动一次Storyboard。 - Code Learner
@sachinshinde 请尝试我的方法,它可以正确地完成相同的事情。 - Shubham Sahu
@shubhamSahu 感谢您检查代码。 - Code Learner
1个回答

1

不要检查文本框文本或按钮按下,只需使用单个条件IsChecked, 不要使用简单的Button,而是使用ToggleButton并将您的按钮样式应用于它。

您可以像这样使用它:

您的TextBlock

<TextBlock x:Name="abctxt" Text="Disconnected" />

ToggleButton替代Button

<ToggleButton x:Name="sbbtn"> <!-- Also Apply Your Style For making your ToggleButton looks like your Button -->
<ToggleButton.Triggers>
    <EventTrigger RoutedEvent="ToggleButton.Checked">
        <BeginStoryboard Storyboard="{StaticResource ConnectedTextChange}" />
    </EventTrigger>
    <EventTrigger RoutedEvent="ToggleButton.Unchecked">
        <BeginStoryboard Storyboard="{StaticResource DisconnectedTextChange}" />
    </EventTrigger>
    </ToggleButton.Triggers>

您的故事板
<!-- Here i set TargetName also -->
<Storyboard x:Key="ConnectedTextChange" x:Name="ConnectedTextChange" Storyboard.TargetName="abctxt">
<StringAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Text)" AccelerationRatio="1">
    <DiscreteStringKeyFrame KeyTime="0:0:0.8" Value="Connected"/>
</StringAnimationUsingKeyFrames>

<Storyboard x:Key="DisconnectedTextChange" x:Name="DisconnectedTextChange" Storyboard.TargetName="abctxt">
    <StringAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Text)" AccelerationRatio="1">
        <DiscreteStringKeyFrame KeyTime="0:0:0.8" Value="Disconnected"/>
    </StringAnimationUsingKeyFrames>
</Storyboard>

1
谢谢,它按预期工作,还要感谢您建议使用切换按钮。 - Code Learner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接