AdaptiveStyles.xaml 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3. xmlns:sys="clr-namespace:System;assembly=mscorlib">
  4. <!--
  5. M4-01-4 · 自适应竖屏改造规约(供主页 + 13 子页统一复用)
  6. ============================================================
  7. 目标:分辨率无关。所有 View 套用同一套自适应约定,避免各页各写,便于 D6 基准定后统一调。
  8. 本字典「不含业务样式」,只沉淀通用规约资源与约定注释。
  9. —— 三段式根模板约定 ——
  10. 每个 View 根容器(含子页)遵循:
  11. UserControl 去写死 Width/Height(仅保留 d:DesignWidth/d:DesignHeight 供设计期预览);
  12. 根 Grid 行:固定顶栏(Auto+MinHeight) → 主内容区(*) → 固定底部(Auto+MinHeight);
  13. 主内容区用 * 吃掉剩余空间(主页零滚动 M4-05;子页装不下时整页主内容区整体滚动)。
  14. —— */Auto 用法约定 ——
  15. 固定栏(顶栏/底部导航/分隔线):Auto + 内部 MinHeight/MinWidth,绝不写死像素行高/列宽;
  16. 弹性区(主内容、舱网格、三等分时间条):* 比例分配;
  17. 分隔线:保留 1px 物理列/行;
  18. 外层由 MainWindow 的 Viewbox(Stretch=Uniform) 等比缩放到实际屏,控件内部坐标系随之等比放缩。
  19. —— Viewbox 包裹约定 ——
  20. 顶层窗口已用 Viewbox(Uniform) 等比缩放(MainWindow.xaml.cs,全配置生效);
  21. 子 View 不再各自包 Viewbox(避免双重缩放),直接交由顶层 Viewbox 统一等比;
  22. 圆形培养皿等强约束控件(CustomHouseInfo)作为一个等比单元随 Viewbox 缩放,内部固定画布坐标不拆。
  23. [D6] 设计基准分辨率取值 / 是否由 Uniform 切真弹性,依赖 Surface 真机,随 M7 校准。
  24. -->
  25. <!-- 触控基准尺寸(设计单位;经顶层 Viewbox 等比缩放后实际更大)。M4-02 全局引用此资源设按钮/输入框/键盘按键 MinWidth/MinHeight。 -->
  26. <sys:Double x:Key="TouchMinSize">48</sys:Double>
  27. <!--
  28. ============================================================
  29. M4-02 · 触控优先兼容鼠标(需求 5/6/11)
  30. ============================================================
  31. 原则(与子计划 M4-02 一致):
  32. 1. 触控目标 ≥48px(TouchMinSize):用「隐式样式」一处定义、全局生效(DRY),
  33. 覆盖标准 Button/ToggleButton/ListBoxItem/TextBox/PasswordBox/RadioButton/CheckBox;
  34. 尺寸用逻辑像素(DIP),配合 M4-01 顶层 Viewbox(Uniform) 等比缩放,分辨率无关。
  35. 2. 触控滚动:命名样式 TouchScrollViewerStyle 设 PanningMode + IsManipulationEnabled,
  36. 触控平移与鼠标滚轮/滚动条并存(沿用既有默认模板,不改其呈现)。
  37. 3. 触控与鼠标兼容:仅加触控属性 + IsPressed 视觉反馈,不改任何 Click/MouseDown/TouchUp
  38. 事件与业务绑定;WPF 默认把触控 promote 成 Mouse 事件,故无需双写。
  39. 作用域说明:
  40. - 隐式样式(无 x:Key)经 App.xaml MergedDictionaries 合并后对「标准控件类型」全局生效;
  41. 不波及自定义控件(ButtonTopImage/ButtonLeftImage/ButtonCornerRadius 等子类,
  42. 隐式样式按精确 TargetType 匹配,不命中子类)——这些自定义控件按实例改 MinHeight/弹性宽。
  43. - 不命中 ComboBox 内部 ToggleButton(其用 OverridesDefaultStyle 的 ComboBoxToggleButton)。
  44. - ComboBox 触控已由 App.xaml 处理(ComboBoxStyle1:PanningMode=Both/Stylus.IsFlicksEnabled=False、
  45. ComboBoxItemContainerStyle1:Item 高 66≥48),本字典不重复定义 ComboBox 样式。
  46. [M7] 真机触控热区/平移/反馈的运行级验证见待验证清单 V-081~V-084。
  47. -->
  48. <!-- 触控视觉反馈:触控/鼠标按下时整体微降透明度(IsPressed 触发器,不依赖具体模板,兼容自定义模板)。隐式样式无共同基类可 BasedOn,故在各样式内联同一触发器。 -->
  49. <!-- 标准按钮:触控目标 ≥48px + 触控内边距 + 按下视觉反馈。不改模板/不改事件。 -->
  50. <Style TargetType="{x:Type Button}">
  51. <Setter Property="MinHeight" Value="{StaticResource TouchMinSize}"/>
  52. <Setter Property="MinWidth" Value="{StaticResource TouchMinSize}"/>
  53. <Setter Property="Padding" Value="12 8"/>
  54. <Setter Property="Stylus.IsPressAndHoldEnabled" Value="False"/>
  55. <Style.Triggers>
  56. <!-- 触控/鼠标按下视觉反馈(promotion 后 IsPressed 对触控同样成立)。 -->
  57. <Trigger Property="IsPressed" Value="True">
  58. <Setter Property="Opacity" Value="0.75"/>
  59. </Trigger>
  60. </Style.Triggers>
  61. </Style>
  62. <!-- 标准切换按钮(含 RadioButton/CheckBox 视觉宿主之外的独立 ToggleButton)。 -->
  63. <Style TargetType="{x:Type ToggleButton}">
  64. <Setter Property="MinHeight" Value="{StaticResource TouchMinSize}"/>
  65. <Setter Property="MinWidth" Value="{StaticResource TouchMinSize}"/>
  66. <Setter Property="Padding" Value="12 8"/>
  67. <Setter Property="Stylus.IsPressAndHoldEnabled" Value="False"/>
  68. <Style.Triggers>
  69. <Trigger Property="IsPressed" Value="True">
  70. <Setter Property="Opacity" Value="0.75"/>
  71. </Trigger>
  72. </Style.Triggers>
  73. </Style>
  74. <!-- 列表项触控行高 ≥48px(沿用默认模板,仅放大命中区)。 -->
  75. <Style TargetType="{x:Type ListBoxItem}">
  76. <Setter Property="MinHeight" Value="{StaticResource TouchMinSize}"/>
  77. <Setter Property="Padding" Value="12 8"/>
  78. </Style>
  79. <!-- 单选/多选触控行高 ≥48px(命中区放大,便于触控)。 -->
  80. <Style TargetType="{x:Type RadioButton}">
  81. <Setter Property="MinHeight" Value="{StaticResource TouchMinSize}"/>
  82. <Setter Property="Padding" Value="8 8"/>
  83. </Style>
  84. <Style TargetType="{x:Type CheckBox}">
  85. <Setter Property="MinHeight" Value="{StaticResource TouchMinSize}"/>
  86. <Setter Property="Padding" Value="8 8"/>
  87. </Style>
  88. <!-- 文本输入框触控高度 ≥48px(仅 MinHeight/内边距/垂直居中,不改输入逻辑/校验/绑定)。 -->
  89. <Style TargetType="{x:Type TextBox}">
  90. <Setter Property="MinHeight" Value="{StaticResource TouchMinSize}"/>
  91. <Setter Property="Padding" Value="8 6"/>
  92. <Setter Property="VerticalContentAlignment" Value="Center"/>
  93. </Style>
  94. <Style TargetType="{x:Type PasswordBox}">
  95. <Setter Property="MinHeight" Value="{StaticResource TouchMinSize}"/>
  96. <Setter Property="Padding" Value="8 6"/>
  97. <Setter Property="VerticalContentAlignment" Value="Center"/>
  98. </Style>
  99. <!--
  100. 触控滚动样式(命名,按需显式套用到「整页主内容区/列表区」的 ScrollViewer;
  101. 不做隐式样式,避免覆盖 WpfControlLibrary 自定义模板的 ScrollViewer 与 ComboBox 下拉 ScrollViewer)。
  102. PanningMode=VerticalFirst:触控单指竖向平移优先(主内容区多为竖向滚动);
  103. IsManipulationEnabled=True:启用触控操纵(惯性平移);
  104. Stylus.IsFlicksEnabled=False:禁手写笔轻拂误触;
  105. 鼠标滚轮/滚动条沿用默认行为,触控与鼠标并存。
  106. -->
  107. <Style x:Key="TouchScrollViewerStyle" TargetType="{x:Type ScrollViewer}">
  108. <Setter Property="PanningMode" Value="VerticalFirst"/>
  109. <Setter Property="PanningRatio" Value="1"/>
  110. <Setter Property="IsManipulationEnabled" Value="True"/>
  111. <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
  112. <Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
  113. <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/>
  114. </Style>
  115. </ResourceDictionary>