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