2017-04-04 5 views
0

データベースから各アイテムのカードを生成します。 編集機能を追加します。ですから、TextBlockをダブルクリックするとTextBoxに変わり、同じ内容になります。今までダブルクリックでTextBoxを生成してTextBlockを生成します

私のコードは次のとおりです。

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     if (e.LeftButton == MouseButtonState.Pressed && e.ClickCount == 2) 
     { 
      string test = (sender as TextBlock).Text; 
      (sender as TextBlock).Visibility = Visibility.Hidden; 

      TextBox descContentBox = new TextBox(); 
      descContentBox.TextWrapping = TextWrapping.Wrap; 
      descContentBox.Text = test; 
      descContentBox.Opacity = .68; 

     } 
    } 

しかし、私は、これは動作しませんね。 Imは別の機能でTextBlockなどを生成するためです。

私の2回目の試行は、次のとおりです。その後、

private void LoadRoles() 
    [...] 
    TextBlock descContent = new TextBlock(); 
    descContent.Opacity = .68; 
    descContent.TextWrapping = TextWrapping.Wrap; 
    descContent.Text = reader[2].ToString(); 

    TextBox descContentBox = new TextBox(); 
    descContentBox.TextWrapping = TextWrapping.Wrap; 
    descContentBox.Text = descContent.Text; 
    descContentBox.Opacity = .68; 
    descContentBox.Visibility = Visibility.Hidden; 

とのMouseDownイベントでの可視性を変更します。しかし、私はdescContentBoxを検出する方法を知らないという問題があります。私はdescContentを(TextBlockとしての送信者)で検出します。しかし、どのように生成された隠しdescContentBoxを検出するには?

したがって、別の解決策が必要です。何か案は ?

+0

あなたは新しい 'TextBox'を作成していますが、これをあなたの「ホルダー」(親コントロール)には付けていません。 –

+0

私の所有者(生成されたStackPanel)がLoadRolesメソッドで定義されているためです。だから私はMouseDownイベントからそれにアクセスすることはできません。 –

答えて

2

TextBlockは、何らかの親パネルにあります。あなたはこの1への参照を取得して、それにTextBoxを追加することができます。例:

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    if (e.LeftButton == MouseButtonState.Pressed && e.ClickCount == 2) 
    { 
     TextBlock txt = sender as TextBlock; 
     Panel panel = txt.Parent as Panel; 
     if (panel != null) 
     { 
      txt.Visibility = Visibility.Collapsed; 
      int index = panel.Children.IndexOf(txt); 

      TextBox descContentBox = new TextBox(); 
      descContentBox.TextWrapping = TextWrapping.Wrap; 
      descContentBox.Text = "test"; 
      descContentBox.Opacity = .68; 
      panel.Children.Insert(index, descContentBox); 
     } 

    } 
} 

TextBlockが内に直接配置されている場合、上記のサンプルは動作するはずPanelなどStackPanelGridとして、あるいは:

<StackPanel> 
    <TextBlock MouseDown="TextBlock_MouseDown" Text="edit..." /> 
</StackPanel> 
+0

問題は、StackPanelも生成されていることです。 コードが長すぎますが、私のコードはコントロールが生成されます: https://pastebin.com/HrPs9RVU –

+0

だから? StackPanelが「生成」されているかどうかはどのような違いがありますか? – mm8

+1

ああ申し訳ありません。それは朝早く、私はURコードをチェックしていません。 Nvmそれはあなたの助けのために今thxを働かせます:) –

関連する問題