Correct `TextBox.PlaceHolderText` implementations
- Dominant language
- C#
- Stars
- 4.9k
- Forks
- 1.1k
- Avg merge
- 20h 23m
- Merged PRs (30d)
- 103
Description
**Is your feature request related to a problem? Please describe.**
The current implementation of `TextBox.TextPlaceHolderText` API added in #96/#238 suffers from a number of deficiencies and shortcomings as listed below.
1. It is unaware of the native implementation and visually inconsistent with it:
```cs
textBox1.PlaceholderText = "Custom!";
SendMessageW(textBox1.Handle, EM_SETCUEBANNER, IntPtr.Zero, "NATIVE PlaceHolder..");
```

2. It is visually inconsistent with the native implementation:
* This implementation - `TextBox` control with `PlaceHolderText` property set:

* Native implementation - `TextBox` control with the placeholder text set via the `EM_SETCUEBANNER`:

- different locations,
- different font colours, and
- different shortening strategies.
3. The current implementation is also not UIA aware:
* This implementation

* Native implementation:

**Describe the solution you'd like and alternatives you've considered**
* Keep the existing public API surface in tact
* Rework `PlaceHolderText` implementation as follows:
- Use Win32 API [`EM_SETCUEBANNER`](https://docs.microsoft.com/windows/win32/controls/em-setcuebanner) for single line textboxes when visual styles are enabled.
- Align location of the custom drawn text with the position of the Win32 implementation.
- Align the font of the custom drawn text with the size/style of the Win32 implementation.
- Align the color of the custom drawn text with the color of the Win32 implementation.
- Align the shortening strategy of the custom drawn text with the color of the Win32 implementation - i.e. clip the text instead of "..."
* Fallback to the current implementation in the following situations:
- `TextBox.Multiline = true`.
- Visual styles are disabled.
❗ Tests must verify correct behaviours when switching single<-->multiline.
❕ Accessibility support for the custom drawn text at this stage remains optional.
Contributor guide
Assessment
This issue has not been assessed yet.