2016-03-30 9 views
0

私は単純なファイルマネージャを作成しています。 ListBoxをダブルクリックして新しいディレクトリを開こうとします。 MouseDoubleClickを使用してコード内でsecondtb1.Textプロパティ値を取得するにはどうすればよいですか?テンプレートのTextBox値を取得する方法

私のXAML

<ListBox x:Name="secondPageListbox" Background="{x:Null}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="320"/> 
       <ColumnDefinition Width="50"/> 
       <ColumnDefinition Width="186"/> 
      </Grid.ColumnDefinitions> 
      <Grid Grid.Column="0"> 
       <TextBlock x:Name="secondtb1" TextWrapping="Wrap" Foreground="White" Text="{Binding Name}"/> 
      </Grid> 
      <Grid Column="1"> 
       <TextBlock x:Name="secondtb2" TextWrapping="Wrap" Foreground="White" Text="{Binding current.Extension}"/> 
      </Grid> 
      <Grid Column="2"> 
       <TextBlock x:Name="secondtb3" TextWrapping="Wrap" Foreground="White" Text="{Binding creationTime}"/> 
      </Grid> 
     </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
     <EventSetter Event="MouseDoubleClick" Handler="SecondListBoxItem_MouseDoubleClick"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
+1

あなたが背後にあるコードでのイベント処理を行うことが行うように見えるので、あなただけの –

+0

の背後にあるコードで 'secondtb2.Text'を使用することができますしかし、私はその中で、リストボックス –

+0

ああにsecondtb1の多くを持っていますcaseコマンドを代わりに使用し、現在のバインディングを渡します –

答えて

0

あなたはテキストボックスのコンテンツ値を取得したい場合:

secondtb2.Text; 

あなたがこの方法で使用することができます:

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject 
{ 
    if (depObj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
      if (child != null && child is T) 
      { 
       yield return (T)child; 
      } 

      foreach (T childOfChild in FindVisualChildren<T>(child)) 
      { 
       yield return childOfChild; 
      } 
     } 
    } 
} 

をして、あなたがそうのようなコントロールの上に列挙:

foreach (TextBlock textBlock in FindVisualChildren<TextBlock>(window)) 
{ 
    textBlock.Text; // your text from TextBlock 
} 

これを有効にして、ウィンドウ(たとえば)に0のビジュアル子があることがわかっている場合は、このメソッドをLoadedイベントハンドラで実行してみてください。コンストラクタで(InitializeComponent()の後でも)コンストラクタを実行すると、ビジュアル子はまだロードされず、動作しません。ソースへ リンク:Find all controls in WPF Window by type

関連する問題