小编Cle*_*ang的帖子

在 WPF 中的 Window.Resources 中声明 EventTrigger 时不起作用

我是 WPF 的新手,所以我可能会遗漏一些重要的东西,但我已经尝试过并试图对以下现象提出解释,但无济于事。基本上,以下代码有效(显示动画):

    <Window.Resources>
    <Storyboard x:Key="LoadStoryBoard"
AutoReverse="True"
RepeatBehavior="Forever">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="button1" 
                Storyboard.TargetProperty="(Button.Opacity)">
            <EasingDoubleKeyFrame KeyTime="0:0:0.7" Value="0.4" />
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>
...
<Button x:Name="button1" Grid.Column="0" Grid.Row="1" Style="{StaticResource Load}">
<Button.Triggers>
    <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard Storyboard="{StaticResource LoadStoryBoard}" />
            </EventTrigger>
</Button.Triggers>
</Button>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将 eventrigger 放入以下加载样式时,动画不再出现:

    <Window.Resources>
    <Storyboard x:Key="LoadStoryBoard"
AutoReverse="True"
RepeatBehavior="Forever">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="button1" 
                Storyboard.TargetProperty="(Button.Opacity)">
            <EasingDoubleKeyFrame KeyTime="0:0:0.7" Value="0.4" />
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>
...
<Style x:Key="Load" TargetType="Button">
...
<Style.Triggers>
    ...
    <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard Storyboard="{StaticResource LoadStoryBoard}" />
            </EventTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

wpf events triggers styles

6
推荐指数
1
解决办法
4181
查看次数

WPF触发器无法按预期工作

我想要一个红色按钮,当鼠标悬停在它上面时会变黑.

    <Button Content="Hover me" Grid.Column="3" Grid.Row="3">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Background" Value="Red"/>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="Black"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
Run Code Online (Sandbox Code Playgroud)

但是,我的问题是,当我将鼠标悬停在按钮上时,它会变成具有渐变灰色外观的默认Windows样式.

wpf triggers styles button ismouseover

5
推荐指数
1
解决办法
5913
查看次数

检查处理程序!= null vs检查C#中是否有事件!= null

我已经看到了各种编码样式来在C#中触发事件.第一种风格包括以下内容:

-an事件处理程序

    public delegate void NumberReachedEventHandler(object sender, 
    NumberReachedEventArgs e);
Run Code Online (Sandbox Code Playgroud)

-一个事件

    public event NumberReachedEventHandler NumberReached;
Run Code Online (Sandbox Code Playgroud)

- 以及触发事件的方法

    protected virtual void OnNumberReached(NumberReachedEventArgs e)
    {
        if(NumberReached != null)
        {
            NumberReached(this, e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

然而,第二种风格有一种不同的方法来触发事件:

    protected virtual void OnNumberReached(NumberReachedEventArgs e)
    {
        NumberReachedEventHandler handler = NumberReached;
        if(handler != null)
        {
            handler(this, e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

对我来说,似乎一个样式检查"event"是否为null,第二个样式检查委托是否为null.但是,我的理解是一个事件只是一个委托的实例,所以我想知道编写代码的方式是否有任何优势.如果是,请解释.提前致谢.

c# null events delegates handler

3
推荐指数
1
解决办法
1492
查看次数

标签 统计

events ×2

styles ×2

triggers ×2

wpf ×2

button ×1

c# ×1

delegates ×1

handler ×1

ismouseover ×1

null ×1