Wenn in ein Steuerelement implementiert wird, welches den Default-Fokus erhalten soll, muss das Interface IDefaultFocus implementiert werden. In diesem Fall muss im Renderer sichergestellt werden, dass das Flag DefaultFocus ausgewertet wird und ggf. das Steuerelement die entsprechende CSS-Klasse erhält, um korrekt fokusiert zu werden.

Steuerelement

IDefaultFocus definiert, dass dieses Steuerelement ein Property namens DefaultFocus haben muss:

[DisplayName("D2507FDE-58B5-4FA5-80D4-CF8CB23968F3")]
[PropertiesGroup("CC746B4E-7655-43C4-B57A-37C77FBAD021", 200)]
[HelpText("56C897A2-53B7-4EE5-8F57-6C32F12ACF71")]
public bool DefaultFocus { get; set; }

Renderer

Im Renderer ist folgender Code erforderlich (hier am Beispiel einer Combobox):

if (!readOnly && control.DefaultFocus && control.Visible)
{
    comboModel.Settings.ControlStyle.CssClass += RenderingUtils.GetDefaultFocusStyles(renderingContext);
    SubRecordsControl subRecordsControl = RenderingUtils.FindSubRecordsControl(renderingContext);
    if (subRecordsControl != null)
        comboModel.Settings.ControlStyle.CssClass += " " + Constants.DefaultFocus.SubFocus;
    if (subRecordsControl == null || (subRecordsControl != null && subRecordsControl.DefaultFocus))
        comboModel.Settings.ControlStyle.CssClass += " " + Constants.DefaultFocus.Focus;
}

Erklärung: Wenn das Flag DefaultFocus gesetzt ist erweitern wir die Styles dieses Controls um eine oder zwei CSS-Klasse ergänzt – je nachdem ob dieses Element in Teildaten verwendet wird oder direkt in einer Maske steht. Falls es in Teildaten verwendet wird, und das Teildatensatzelement selbst auch das DefaultFocus Flag gesetzt hat bekommt dieses Element beide CSS-Klassen.

Zur Vereinfachung gibt es eine Helper-Methode

if (!readOnly && control.DefaultFocus && control.Visible)
    comboModel.Settings.ControlStyle.CssClass += RenderingUtils.GetDefaultFocusStyles(renderingContext);