当前位置: 首页 > news >正文

5.1 WPF路由事件以及文本样式

   一、路由事件

        WPF中存在一种路由事件(routed event),该事件将发送到包含该控件所在层次的所有控件,如果不希望继续向更高的方向传递,只要设置e.Handled = true即可。

        这种从本控件-->父控件->父的父控件的事件,成为冒泡事件(bubbling event)。

        路由方向也可以反向,比如从父控件->子控件->子控件的子控件。这种事件成为下钻事件(tunneling event),下钻事件都是使用Preview作为前缀。

举例说明:

1.1  对于一个grid中的button按钮,选择该按钮后按下某个按键(除了回车+空格外),则触发顺序为:

        window_PreviewKeyDown --> Grid_PreviewKeyDown ->Button_PreviewKeyDown

->Button_KeyDown--> Grid_KeyDown-->  window_KeyDown

      可见PreviewKeyDown是下钻事件;而KeyDown是冒泡事件

1.2  如果增加  e.Handled = true,见下面代码,则触发顺序为:

window_PreviewKeyDown --> Grid_PreviewKeyDown,后面命令就不执行了

 private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
 {
     MessageBox.Show("grid - previewkeydown");
     e.Handled = true;
 }

二、作用于按钮的样式

   2.1 如果所有按钮需要同样的样式,则可以使用如下(TargetType="Button")代码:

 <Window.Resources>
      <Style TargetType="Button">
          <Setter Property="Background" Value="Red"/>
          <Setter Property="FontSize" Value="15"/>
      </Style>
  </Window.Resources>

2.2 给样式命名(x:Key),然后应用到某些控件上(Style="{StaticResource greenButtonStyle}" )

 <Window.Resources>
     <Style TargetType="Button">
         <Setter Property="Background" Value="DarkGray"/>
         <Setter Property="FontSize" Value="15"/>
     </Style>
     <Style x:Key="greenButtonStyle" TargetType="Button">
         <Setter Property="Background" Value="Green"/>
         <Setter Property="FontSize" Value="15"/>
     </Style>
 </Window.Resources>

 <Button x:Name="btnFile" Style="{StaticResource greenButtonStyle}"   />

3.使用BasedOn来利用自定义的某类控件的格式

   

<Window.Resources>
        <Style TargetType="Button">
            <Setter Property="Background" Value="DarkGray"/>
            <Setter Property="Foreground" Value="Red"/>
            <Setter Property="FontSize" Value="15"/>
            <Setter Property="Height" Value="50"/>
        </Style>
        <Style x:Key="greenButtonStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
            <Setter Property="Background" Value="Green"/>     
        </Style>
        <Style x:Key="yellowButtonStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
            <Setter Property="Background" Value="Yellow"/>
        </Style>
    </Window.Resources>

4. 公共资源可以放置到:资源字典中:

这样每个窗口都可以使用这些公用的资源字典。

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/Style/MyButtonStyle.xaml"/>
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

5.对控件本身进行样式设定

<Button x:Name="btnFile"  Width="50" HorizontalAlignment="Left"  Grid.Column="0" Grid.Row="0" Margin="0,0,0,0  " Click="btnFile_Click">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Border Background="White" BorderThickness="4" BorderBrush="Black" CornerRadius="10" >
                <ContentPresenter Content="文件" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
        </ControlTemplate>
    </Button.Template>
</Button>

相关文章:

  • C笔记20250325
  • Golang使用 ip2region 查询IP的地区信息
  • 某Bzhan登录逆向(纯算法)
  • WSL 2是什么: Docker Desktop 默认依赖 WSL 2
  • 求最大公约数与最小公倍数
  • C#TCP通讯封装服务器工具类
  • 19、练习题
  • 从物理学到机器学习:用技术手段量化分析职场被动攻击行为
  • 【自学笔记】.NET基础知识点总览-持续更新
  • Opencv 图像读取与保存问题
  • RHCA核心课程技术解析4:红帽服务管理与自动化深度实践
  • Leetcode 背包问题笔记
  • python基础--类
  • python三大库之--numpy(一)
  • SQLAlchemy 支持特殊字符
  • 16. 最接近的三数之和
  • 如何让DeepSeek-R1在内网稳定运行并实现随时随地远程在线调用
  • AIGC-头条号长文项目创作智能体完整指令(DeepSeek,豆包,千问,Kimi,GPT)
  • 安装教程:windows上安装oracle详细教程
  • Python 3.13 正式支持 iOS:移动开发的新篇章
  • 芜湖做网站公司/企业seo排名有 名
  • 网站开发验收报告模板/网站流量统计分析的维度包括
  • 郑州做网站要多少钱/色盲怎么治疗
  • 福州最新消息/seo站群优化
  • 怎么做便民信息网站/搜索引擎推广一般包括哪些
  • 软件开发流程包括/seo关键词优化经验技巧