仓库指标
- Star
- (4,100 star)
- PR 合并指标
- (平均合并 14天 22小时) (30 天内合并 56 个 PR)
描述
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.
-
It is unaware of the native implementation and visually inconsistent with it:
textBox1.PlaceholderText = "Custom!"; SendMessageW(textBox1.Handle, EM_SETCUEBANNER, IntPtr.Zero, "NATIVE PlaceHolder..");
-
It is visually inconsistent with the native implementation:
-
This implementation -
TextBoxcontrol withPlaceHolderTextproperty set:
-
Native implementation -
TextBoxcontrol with the placeholder text set via theEM_SETCUEBANNER:
- different locations,
- different font colours, and
- different shortening strategies.
-
-
The current implementation is also not UIA aware:
- This implementation

- Native implementation:

- This implementation
Describe the solution you'd like and alternatives you've considered
- Keep the existing public API surface in tact
- Rework
PlaceHolderTextimplementation as follows:- Use Win32 API
EM_SETCUEBANNERfor 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 "..."
- Use Win32 API
- 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.