【问题标题】:EventTrigger with Setter in WPF?WPF中带有Setter的EventTrigger?
【发布时间】:2010-10-06 07:18:25
【问题描述】:

我在 WPF 窗口中有一个普通的 Button 和 TextBox,我想要一个带有 EventTrigger 的 Button 模板,它监听 Button.Click,然后设置 TextBox 的布尔属性。没有代码隐藏。

类似这样的:

<ControlTemplate.Triggers>
  <EventTrigger SourceName="MyButton" RoutedEvent="Button.Click">
    <Setter TargetName="MyTextBox" Property="Focusable" Value="False" />
  </EventTrigger>

【问题讨论】:

    标签: wpf templates triggers setter


    【解决方案1】:

    这是一个示例,它通过 EventTrigger 在 TextBox 上设置和清除 Focusable
    希望您可以根据您的情况调整此示例。

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBox 
            x:Name="tb"
            Grid.Row="0"
            Text="Here is some sample text">
        </TextBox>
        <Button 
            x:Name="btnFocusTrue"
            Grid.Row="1"
            Content="Set True">
        </Button>
        <Button 
            x:Name="btnFocusFalse"
            Grid.Row="2"
            Content="Set False">
        </Button>
        <Grid.Triggers>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnFocusTrue">
                <BeginStoryboard Name="FocusTrueStoryboard">
                    <Storyboard >
                        <BooleanAnimationUsingKeyFrames
                            Storyboard.TargetName="tb"
                            Storyboard.TargetProperty="(TextBox.Focusable)">
                            <DiscreteBooleanKeyFrame
                                KeyTime="00:00:01"
                                Value="True" />
                        </BooleanAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnFocusFalse">
                <BeginStoryboard Name="FoucsFalseStoryboard">
                    <Storyboard >
                        <BooleanAnimationUsingKeyFrames
                            Storyboard.TargetName="tb"
                            Storyboard.TargetProperty="(TextBox.Focusable)">
                            <DiscreteBooleanKeyFrame
                                KeyTime="00:00:01"
                                Value="False" />
                        </BooleanAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>
    </Grid>
    

    【讨论】:

    • Ahhh 错过了 Discrete*KeyFrame 类...它解决了我的问题,但是对于这样一个简单的任务它有很多 xaml...我希望那里有一个较短的版本
    • 如何在事件触发器中设置自定义依赖属性值??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多