2017-05-05 4 views
-1

값을 바인딩하고 DataTemplate에 표시하는 Accordion Control이 있습니다. 이 내 사용자 컨트롤에있는 것입니다 :코드 숨김에있는 DataTemplate에서 TextBlock의 텍스트를 가져 오는 방법

<layoutToolkit:Accordion x:Name="MyAccordion"> 
<layoutToolkit:Accordion.ItemTemplate> 
    <DataTemplate > 
     <TextBlock x:Name="Header" Text="{Binding Header}"/> 
    </DataTemplate> 
</layoutToolkit:Accordion.ItemTemplate> 
<layoutToolkit:Accordion.ContentTemplate> 
    <DataTemplate> 
     <StackPanel> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock x:Name="Content" Text="{Binding Content}" /> 
      </StackPanel> 
      <StackPanel Orientation="Horizontal"> 
       <Button x:Name="MyMethod" Content="Method" Click="MyMethod"/> 
      </StackPanel> 
     <StackPanel> 
    </DataTemplate> 
</layoutToolkit:Accordion.ContentTemplate> 

내 지금 난 뒤에 코드의 방법에 적용 할 수있는 TextBlock에서 텍스트를 사용할 수 있도록하려면, 작업 바인딩하지만, 아코디언이 열려있는 위치에 따라 값이 달라지기를 바랍니다. 달성 할 수 있습니까?

 public MyUserCOntrol() 
    { 
     InitializeComponent(); 
     this.MyAccordion.SelectionMode = AccordionSelectionMode.ZeroOrOne; 

     //method to fill the accordion 
     this.MyAccordion.ItemsSource = MainWindow._RE.ListActionsParType; 
    } 

    public void MyMethod(object sender, EventArgs e) 
    { 
     string TxtBlockContent = ....; 
     // so i can use this value in other operations 
    } 

내가 (이 myMethode의 여기) 방법을 만들려면 내가 아코디언이 열리는 버튼을 클릭하고이 값이 따라 그 사용에 적용 것이다 :

이 내 코드는 숨김 방법입니다 당신이 DataTemplate을에 표시하는 TextBlock의 텍스트를 얻을 필요가있는 경우

+1

그 방법은 잘못되었습니다. 이'Header' 속성을 어디서 얻고 있습니까? 'MainWindow._RE.ListActionsParType'에있는 것이 무엇이든, 그것은'INotifyPropertyChanged'를 구현하고 코드 숨김에서 그것의'Header' 속성을 설정합니다. 그러면 아코디언 항목의 텍스트가 업데이트됩니다. –

+0

@EdPlunkett 답변 해 주셔서 감사합니다. INotifyPropertyChanged를 사용하여 모든 정보를 표시 할 수 있습니다. 내가 원했던 것은 textblock의 텍스트를 문자열로 사용하여 메서드에서 사용할 수 있고 어떤 아코디언이 확장되는지에 따라이 값이 변경되기를 원합니다. – 281

+1

그건 잘못되었습니다. 텍스트 블록의 텍스트가 Header 속성에서 나옵니다. Header 속성을 변경하면 텍스트가 변경됩니다. –

답변

-1

, 당신은

는 TextBlock의 당신은

XAML에서 사용 //, 아래의 방법을 사용하여 달성 할 수 코드 숨김

private void Txt_Loaded(object sender, RoutedEventArgs e) 
{ 
    var myText = (sender as TextBlock).Text; 
} 

에서

<TextBlock Loaded="Txt_Loaded"> 

// TextBlock의가보기에로드 될 때마다 위의 이벤트가 시작됩니다. 따라서 위 코드에서와 같이 TextBlock의 텍스트를 가져올 수 있습니다.

+0

감사합니다. 그게 내가 찾고 있었던 것입니다. 처음에 분명하지 않다면 미안 해요! – 281

+0

환영합니다. 귀하의 문제를 해결하는 경우 대답을 upvote하시기 바랍니다. – Divakar

+0

나는 아직, 나는 충분한 명성이 없다. 내가 가진만큼 빨리 할 것입니다 – 281

0

"BindingContextChanged"이벤트를 사용하여 보낸 사람 (실제보기, TextBlock)을 가져옵니다.