Přístup k částem z Control Templatů ve WPF


Ať už používáte systémové controly tak jak jsou nebo vlastní definice Control Templatů (se styly), tak je možné přistupovat k jednotlivým částem controlů právě z templatů, které normálně nejsou dostupné. Stačí znát název (Name) a typ požadovaného controlu.

Jako příklad jsem vybral DatePicker, o kterém vím, že “v sobě” obsahuje část typu DatePickerTextBox pod názvem “PART_TextBox”. Pak už jen např. stačí si odvodit vlastní DatePicker s property a proměnou, kde inicializace bude probíhat pouze při volání a za předpokladu, že je proměnná prázdná a prvek (DatePicker) načten, resp. Template musí být načten:

public class CustomDatePicker : DatePicker
{
  private DatePickerTextBox _TextBoxPart;

  public DatePickerTextBox TextBoxPart
  {
    get
    {
      if (_TextBoxPart == null && IsLoaded)
        _TextBoxPart = Template.FindName("PART_TextBox", this) as DatePickerTextBox;
      return _TextBoxPart;
    }
  }
}

Pozn.: Pokud bych pokračoval dále a chtěl vytáhnout např. obsah části “PART_Popup”, což je prvek Calendar, tak je vhodné inicializaci provádět v události CalendarOpened, kde je zajištěno načtení Templatu…

Jako dobrý zdroj pro vlastní Control Templaty slouží stránka Control Styles and Templates na MSDN, v našem případě konkrétně DatePicker Styles and Templates.

, , , ,

Komentáře jsou uzavřeny.