2012-06-05 4 views
0

여러 컨트롤이 포함 된 DataTemplate이 있습니다.코드 뒤에있는 DataTemplate의 다른 컨트롤에 액세스

private void DoSomethingButton_Click(object sender, RoutedEventArgs e) 
{ 
    ComboBoxItem myItem = (ComboBoxItem)optionsCombo.SelectedItem; 
} 
:이 같은 이름으로 콤보 상자에 액세스하려고하면 컨트롤 중 하나는 버튼 클릭 이벤트에 대한 코드 숨김에서 DataTemplate을

<DataTemplate> 
    <StackPanel> 
     <ComboBox x:Name="optionsCombo" > 
      <ComboBoxItem Content="Option1" /> 
      <ComboBoxItem Content="Option2" /> 
      <ComboBoxItem Content="Option3" /> 
     </ComboBox> 
     <Button Name="DoSomethingButton" Margin="10" Click="DoSomethingButton_Click">Do Something</Button> 
    </StackPanel> 
</DataTemplate> 

의 다른 컨트롤에 액세스 할 필요가있는 버튼입니다

그래서, 어떻게 버튼 클릭 이벤트에서의 DataTemplate에있는 다른 컨트롤에 액세스 할 " 'optionsCombo'이름이 현재 컨텍스트에 존재하지 않는"

오류가 발생합니다?

답변

0

DataTemplates의 코드 생성이 없기 때문에 액세스 할 수 없습니다. 즉, optionsCombo ComboBox는 실제로 컴파일 시간에 존재하지 않으므로 오류가 발생합니다. 코드 뒤에서 조작하려면 VisualTreeHelper를 사용해야합니다. VisualTreeHelper는 인터넷을 통해 잘 설명되어 있습니다. 보낸 사람의 부모 패널을 가져 와서 이름으로 ComboBox를 찾은 다음 적절한 유형으로 캐스트하십시오. 거기 있군!

관련 문제