You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+12-6Lines changed: 12 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,12 +25,18 @@ No test project exists currently.
25
25
26
26
### Control Hierarchy
27
27
28
-
`LabelBase` is the base control — a Grid containing a Label, required indicator (`*`), a Border wrapping a generic View, and error message labels. Each concrete control inherits from `LabelBase` and composes a native MAUI control inside the Border:
28
+
`LabelBase` is the base control — a Grid containing a label (with required indicator `*`) floating over a `NotchedBorder`, plus example and error message labels below. The label sits over the top edge of the border; `LabelBase` computes the notch coordinates so the stroke leaves a gap behind the label text. Each concrete control inherits from `LabelBase` and composes a native MAUI control inside the border:
`LabeledAutoCompleteEntry` is a separate `ContentView` that composes a `LabeledEntry` plus a suggestion dropdown (`CollectionView` in a `Border`), forwarding a subset of `LabeledEntry`'s properties.
36
+
37
+
### Drawing
38
+
39
+
`Drawing/NotchedBorder` is an internal-by-convention control (public but `[EditorBrowsable(Never)]`) that renders the outlined border via `Microsoft.Maui.Graphics` (`GraphicsView` + `IDrawable`). The pure path geometry lives in `Drawing/NotchedBorderDrawing.BuildPath`.
34
40
35
41
### Key Pattern: BindableProperty Proxying
36
42
@@ -43,9 +49,9 @@ Each control proxies BindableProperties from the inner MAUI control to the outer
43
49
44
50
### Platform-Specific Code
45
51
46
-
`EntryBase` uses conditional compilation (`#if ANDROID` / `#if IOS`) to select `EntryBaseNative`, which applies platform-specific styling through MAUI handler mappers:
52
+
`EntryBase` uses conditional compilation (`#if ANDROID` / `#if IOS`) to select `EntryBaseNative`; `PickerBase`/`DatePickerBase`/`TimePickerBase` use inline `#if` blocks. All apply platform-specific styling through MAUI handler mappers, filtered on the NiceEntry view type so consumer controls are unaffected:
47
53
-**Android**: Transparent background on the underlying `AppCompatEditText`
48
-
-**iOS**: No border style on the underlying `UITextField`
54
+
-**iOS**: No border style on the underlying `UITextField`; the picker-style controls also override `MeasureOverride` to match the height of a borderless `UITextField` at the current font size (shared cache in `Base/NativeEntryHeight`)
0 commit comments