WPF事件

博客介绍了WPF相关的事件处理设计过程,包含事件响应方式之一的Trigger,以及使用C#处理函数进行事件处理,还提及了Page2.xaml和Page.cs文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

返回目录


 让我们来写点事件吧

事件图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


设计过程
Step1:Trigger
 事件响应方式1——trigger

            <Image  Stretch="UniformToFill" >
                <Image.Style>
                    <Style>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=rb1,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC.jpg" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=rb2,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC2.jpg" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=rb3,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC3.jpg" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=rb4,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC4.png" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=rb5,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC5.jpg" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Image.Style>
            </Image>

Step1:C#处理函数
Page2.xaml

                <StackPanel Orientation="Horizontal" >
                    <RadioButton x:Name="rb1" Checked="RbChecked" Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡1" FontSize="15" VerticalAlignment="Center"/>
                    <RadioButton x:Name="rb2" Checked="RbChecked"  Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡2" FontSize="15" VerticalAlignment="Center"/>
                    <RadioButton x:Name="rb3" Checked="RbChecked"  Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡3" FontSize="15" VerticalAlignment="Center"/>
                    <RadioButton x:Name="rb4" Checked="RbChecked"  Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡4" FontSize="15" VerticalAlignment="Center"/>
                    <RadioButton x:Name="rb5" Checked="RbChecked"  Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡5" FontSize="15" VerticalAlignment="Center"/>
                </StackPanel>

Page.cs

        private void RbChecked(object sender, RoutedEventArgs e)
        {
            RadioButton rb = sender as RadioButton;
            MessageBox.Show("RadioButton "+ rb.Name +" is checked!");
        }

附录:测试代码
### WPF事件的组成要素 WPF中的事件主要由以下几个核心要素构成: 1. **事件源 (Event Source)** 事件源是指触发事件的对象。在WPF中,通常是某个UI控件(如Button、TextBox等),当用户与其交互时(例如点击按钮或修改文本框内容),会触发相应的事件[^1]。 2. **事件类型 (Event Type)** WPF支持多种类型的事件,其中包括标准CLR事件和路由事件。路由事件WPF特有的机制,允许事件沿着可视化树传播,从而实现更灵活的事件处理逻辑[^2]。 3. **事件数据 (EventData)** 每个事件都会携带一些与之关联的数据,这些数据通常封装在一个派生自`RoutedEventArgs`的类中。例如,鼠标事件可能包含鼠标的坐标信息,键盘事件则可能包含按下的键值[^1]。 4. **事件处理器 (Event Handler)** 事件处理器是一个方法,用于响应特定事件的发生。它必须遵循指定的签名格式,对于大多数WPF事件来说,这通常意味着接受两个参数:一个是发送者 (`object sender`),另一个是事件数据 (`RoutedEventArgs e`)。可以使用C#中的委托来绑定事件到其对应的处理器[^1]。 5. **事件路由模式 (Routing Strategy)** 路由事件的一个重要特性就是它们能够按照预定义策略穿越元素树节点。主要有三种路由方式——冒泡(Bubble),隧道(Tunnel) 和直通(Direct)[^2]。 ### WPF事件的使用方法 以下是几种常见的WPF事件使用场景及其具体实施办法: #### 方法一:通过XAML声明式绑定 可以直接在XAML文件里为控件设定好相应动作发生后的回调函数名称。比如下面的例子展示了如何给一个按钮添加点击行为: ```xml <Button Content="Click Me!" Click="MyButtonClickHandler"/> ``` #### 方法二:利用传统.NET风格的加减运算符订阅/取消订阅事件 也可以采用编程手段,在后台代码(CS文件)内手动注册监听器。如下所示: ```csharp myButton.Click += MyButtonClickHandler; // 若要移除,则改为 -= 运算符 ``` #### 方法三:动态添加路由事件处理器 除了常规途径外,还可以借助 `AddHandler()` 函数更加精细地控制哪些情况下应该激活某段业务逻辑。即使目标组件本身并未显式暴露对应接口也没关系,只要它是从 `UIElement` 或更高层次基类衍生出来的实例就行[^3]: ```csharp someContainer.AddHandler(Button.ClickEvent, new RoutedEventHandler(MyCustomLogicForAllButtonsInside), true); ``` 以上便是关于WPF事件体系结构的一些基础知识概述以及实际应用技巧分享啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值