Как программно добавить обработчик событий к объекту, который существует только в ControlTemplate другого объекта?
Я работаю с Silverlight 4. Я хочу использовать элемент управления ColorSelector из сторонней библиотеки DLL (Liquid).Похоже на комбобокс, но реализован по-другому.(Вероятно, он был создан для более старой версии Silverlight, когда не было системы ComboBox.) Класс ColorSelector является производным от ContentControl, и его внешний вид реализован с использованием ControlTemplate, определенного в файле xaml.
Фактически этоэлемент управления, который выглядит как поле со списком, но программно его объект не является производным от поля со списком.И теперь я застрял, потому что я хотел бы программно получить доступ к объекту со списком, который я вижу на экране.Обычно, если бы это был настоящий стандартный ComboBox, я бы использовал события DropDownOpened и DropDownClosed, чтобы знать, когда окно отображается и скрывается соответственно.Но этот селектор цвета не предоставляет эти события.Но он использует ControlTemplete, который определяет внешний вид ColorSelector как объекта DropDown.Этот класс DropDown является другим классом из той же библиотеки DLL, и его внешний вид также определяется его ControlTemplate, и именно здесь основан этот таинственный комбо-подобный вид.И теперь я полностью смущен всем этим.
Как я могу программно получить доступ к этим визуальным элементам управления, которые я вижу на экране, но непосредственно не присутствует в коде?Вот один простой пример:
class ColorSelector : LiquidControl
class LiquidControl : ContentControl
<Style TargetType="local:ColorSelector">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:ColorSelector">
<local:DropDown x:Name="RootElement">
.....
</local:DropDown>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
class DropDown : LiquidControl
<Style TargetType="local:DropDown">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:DropDown">
<Grid x:Name="RootElement">
<Button x:Name="ElementButton">
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Теперь я создаю новый ColorControl в своем коде (new ColorControl()
), а затем я хотел бы получить доступ к этой кнопке, определенной в шаблоне DropDown.Как это сделать?