2017-05-05 14 views
-1

私は値をバインドしてDataTemplateに表示するアコーディオンコントロールを用意しています。 これは私が私のユーザーコントロールに持っているものです。コードビハインドの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> 

私の今私は背後にあるコード内の方法で適用するテキストブロックからテキストを使用できるようにしたい、働いている結合が、アコーディオンが開いているかどうかによって値が異なるようにしたい。 これは可能ですか?

これはどのように私のコードビハインドである:

 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だ)私が開いているアコーディオンに応じて、ボタンをクリックし、その使用にこの値を適用すること

+1

これは間違った方法です。この 'Header'プロパティはどこから取得していますか? 'MainWindow._RE.ListActionsParType'に何があっても、' INotifyPropertyChanged'を実装し、コードビハインドに 'Header'プロパティを設定します。 Accordionアイテムのテキストが更新されます。 –

+0

@EdPlunkettあなたの答えをありがとう。私はINotifyPropertyChangedを使ってすべての情報を表示することができます。私が望むのは、テキストブロックのテキストを文字列として使用することができるようにするためにメソッドで使用することができます。この値は、どのアコーディオンが展開されているかによって変わります。 – 281

+1

これは間違った方法です。テキストブロック内のテキストは、Headerプロパティから来ています。ヘッダープロパティを変更すると、テキストが変更されます。 –

答えて

-1

あなたがたDataTemplate内に表示のTextBlockのテキストを取得する必要がある場合、あなたは以下の方法を使用してそれを達成することができ、あなたはXAML

で を使用TextBlock内

//コードビハインド

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)を取得します。

関連する問題