Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 24 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,13 +223,17 @@ carry covers what a list-driven application actually uses:

* **Content** — `Items`, `Columns`, and per-column `Width` with the `AutoSizeToContent` /
`AutoSizeToHeader` constants for widths measured rather than guessed.
* **Selection** — `SelectedItems`, `FocusedItem`, `MultiSelect`, `ClearSelection`,
`EnsureVisible`, and `Selected` / `Focused` on a row, both settable before the control has
a window so a list populated during form construction comes up on the right row.
* **Selection** — `SelectedItems`, `FocusedItem`, `ClearSelection`, `EnsureVisible`, and
`Selected` / `Focused` on a row, both settable before the control has a window so a list
populated during form construction comes up on the right row.
* **Multiple selection** — `MultiSelect`, off by default as on a WinForms `ListView`. Turning
it on gives the usual keyboard vocabulary: Shift with the arrows to extend, Ctrl with them to
move the focus without extending, Ctrl+Space to add the focused row. Screen readers announce
all three correctly, so this is a mode worth using rather than one to avoid.
* **Appearance** — `BackColor` and `ForeColor`, per-row `ForeColor`, `BorderStyle`, and a
column's `Alignment` and `SortOrder` arrow, both settable at any time. Left alone, the colors follow the system
theme: light, dark and high contrast, and a switch between them while the application is
running.
column's `Alignment` and `SortOrder` arrow, both settable at any time. Left alone, the colors
follow the system theme: light, dark and high contrast, and a switch between them while the
application is running.
* **Hit testing and layout** — `GetItemAt`, `GetItemBounds`, `SetInsertionMark` /
`ClearInsertionMark` for a drop indicator during a reorder, and `BeginUpdate` / `EndUpdate`
for bulk changes.
Expand Down Expand Up @@ -296,11 +300,23 @@ French and Ukrainian catalogs.
The menus are verified by ear with **JAWS**, **NVDA** and **Narrator**, and behave as expected
on all three.

`NativeListView` is verified on the same three. Every WinForms-based variation reads only the
`NativeListView` is verified on the same three, in single and multiple selection alike.
Extending a selection, moving the focus without extending it, and selecting every row at once
are all announced correctly. The one shortfall is that no reader names the mode: a stock list
box is announced as a "multi select list box" and there is no equivalent wording for a list
view, so the behavior is described well while the mode itself never is. Every WinForms-based variation reads only the
first column on all of them; the real `SysListView32` reads every column on all of them.
Reports from other configurations are welcome.

RTL rendering is implemented but has not been verified against a real RTL locale.
Right-to-left rendering is verified against a real right-to-left catalog: the sample's Hebrew
translation, with Hebrew text in the menus, the column headers and the rows, and Hebrew
mnemonics through the collision validator. Submenu direction and the mirrored tree beside the
list both behave, the latter only once the tree is told to mirror — `RightToLeft` is an ambient
property and `RightToLeftLayout` is not, so a control that right-aligns its text has not
necessarily flipped its arrow keys.

What has not been checked is a machine whose Windows display language is itself right-to-left,
which is a different test from switching language inside a left-to-right system.

## Building from source

Expand Down
35 changes: 34 additions & 1 deletion samples/NoteBook/LISTENING.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,40 @@ window that WinForms does not own. This is the step most likely to fail.
- Right-click a **column header**. A different menu should open — the one about columns.
- Right-click a **row**. The note menu should open instead.

## 6. A language change, and right to left
## 6. Multiple selection

Open. The list is multi-select and nothing here is settled - this step exists to find out what
readers actually do with it, not to confirm something already known. Whatever you hear is the
result, including "nothing".

- With focus on a row, hold **Shift** and press **Down arrow** to extend the selection. You
should hear the row you moved to. Whether you also hear that it was *added to* a selection,
and whether any reader tells you how many rows are now selected, is exactly what is being
measured.
- Press **Ctrl+Down arrow** a few times to move the focus without changing the selection, then
**Ctrl+Space** to add that row. A reader that does not distinguish these two is telling you
something worth writing down: the focus rectangle and the selection are separate things, and
a user who cannot hear which one moved cannot use this mode.
- Open the context menu with **Shift+F10** and choose **Select All**. Listen for whether the
new state is announced at all, or whether the list goes silent after a command that changed
every row in it.
- Shift-click and Ctrl-click with the mouse and compare. Readers sometimes announce a
mouse-driven selection change differently from a keyboard-driven one.

Worth trying on all three readers, because this is the area where they diverge most.

What has been heard so far, September 2026: selection behavior is announced well, on all three.
Extending, moving the focus without extending, and selecting everything at once all come across.

The one gap is the label rather than the behavior. Readers announce a stock multi-select list
box as a "multi select list box", and there appears to be no equivalent wording for a list view
from any of them - so the mode itself is never named, however well its effects are described.
Whether that can be influenced from the control is unresolved: a multi-select list view, a
single-select one and a multi-select list box were all measured reporting identical MSAA state,
which suggests readers decide this from the control class rather than from anything the control
reports. If you can confirm that with a speech viewer, it is worth knowing.

## 7. A language change, and right to left

This is the part of the library with the least real-world verification, and the reason the
sample ships a Hebrew catalog rather than only a layout switch: mirroring English text proves
Expand Down