2010-06-23 2 views
4

Как я могу сформировать свой конструктор в коде, чтобы получить ссылку на элемент управления OuterBorder в XAML ниже?Ссылка на элемент управления внутри контрольной таблицы

<Window Template="{DynamicResource WindowTemplate}"> 
    <Window.Resources>  
     <ControlTemplate x:Key="WindowTemplate" TargetType="{x:Type Window}"> 
      <AdornerDecorator> 
       <Border Name="OuterBorder" Background="Black" BorderBrush="Red" BorderThickness="1" CornerRadius="0"> 
        <!-- Implementation here... --> 
       </Border> 
      </AdornerDecorator> 
     </ControlTemplate> 
    </Window.Resources> 
</Window> 

ответ

4

два возможных решения:

Решение 1

Помещенный Loaded событие в XAML

<Border Name="OuterBorder" Loaded="Border_Loaded" ... 

И в коде позади хранить его в закрытом поле:

private Border border; 

void Border_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.border = (Border)sender; 
} 

ИЛИ:

Решение 2

Override OnApplyTemplate вашего окна:

private Border border; 

public override void OnApplyTemplate() 
{ 
    base.OnApplyTemplate(); 
    this.border = (Border) Template.FindName("OuterBorder", this); 
} 
+0

Ваше решение №. 2 сделал работу для меня. Благодаря! – kennethkryger

1

Вы можете пересмотреть свой подход. Что ты пытаешься сделать?

Как правило, вам не нужно или не нужно получать доступ к частям ControlTemplate из вашего кода, потому что ваш шаблон - это просто шаблон. Вот как выглядит элемент управления. Вы хотите, чтобы ваш codebehind вообще влиял на поведение .

Например, если вы пытаетесь повлиять на цвет границы в коде в определенных интерактивных ситуациях, вы действительно хотите добавить три элемента управления (pre .Net4) или (post .Net4) a VisualStateManager к вашему управлению шаблон для управления визуальными состояниями вашего элемента управления для вас.

+0

Я согласен, что это будет «по-книжечному» способу делать это. Тем не менее, я должен создать adorner в кодировке и установить привязку к этому, так что здесь «решение Acturus» нет. 2 был правильным (и самым быстрым) способом достижения этого. – kennethkryger

Смежные вопросы