2017-02-09 2 views
2

XAMLhinzufügen dynamische Textbox innerhalb der Listbox

<ListBox ItemsSource="{Binding}" HorizontalContentAlignment="Left" x:Name="lstbxindex" SelectionMode="Extended" Foreground="White" FontSize="20px" Height="241" BorderBrush="#555555" Margin="10,34,16,0" VerticalAlignment="Top" Width="322" Background="#555555" 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <WrapPanel Orientation="Horizontal" Margin="5" > 
       <Label x:Name="items" Content="{Binding ProjectRow.Name}" Margin="35,0,0,0" MouseDoubleClick="items_MouseDoubleClick" Foreground="White"></Label> 
      </WrapPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

, wenn ich die ListBoxItems DOPPELKLICK, Das Label wiederum eine Textbox unter Verwendung dieser Textbox ändern ListBoxItems zu ändern, die selected.Then I eingeben klicken Sie auf die Textbox wendet sich an wieder ein Etikett. Wie kann Add dynamictextbox innerhalb der Listbox, die die Werte von Codebehind binden.

Antwort

0

Sie wollen so etwas. Setzen Sie beide Steuerelemente in das Datamaplate mit einem zusammengebrochenen.

Dann im Code hinter die Sichtbarkeitseigenschaften wechseln. Beide sind an die gleiche Eigenschaft gebunden, so dass sie miteinander synchronisiert bleiben.

XAML

<TextBlock Visibility="Visible" Name="TextBlockName" Text="{Binding ProjectRow.Name}" MouseDown="TextBlockName_OnMouseDown" ToolTip="Double click to edit"/> 
     <TextBox Visibility="Collapsed" Name="TextBoxName" Text="{Binding ProjectRow.Name, UpdateSourceTrigger=PropertyChanged}"/> 

-Code hinter

private void TextBlockName_OnMouseDown(object sender, MouseButtonEventArgs e) 
     { 
      if (e.ClickCount == 2) 
      { 
       this.TextBlockName.Visibility = Visibility.Collapsed; 
       this.TextBoxName.Visibility = Visibility.Visible; 
      } 
     } 

    private void TextBoxName_OnMouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     this.TextBlockName.Visibility = Visibility.Visible; 
     this.TextBoxName.Visibility = Visibility.Collapsed; 
    } 
0

ein eigenes Grid erstellen und verwenden:

public class NGrid : Grid 
{ 
    public NGrid() 
    { 
     _textBox = new TextBox { Visibility = Visibility.Hidden }; 
     _label = new Label(); 
     _textBox.KeyDown += _textBox_KeyDown; 
     Children.Add(_textBox); 
     Children.Add(_label); 
    } 

    private void _textBox_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (_isEditMode && e.Key == Key.Return) 
     { 
      _textBox.Visibility = Visibility.Hidden; 
      _label.Content = _textBox.Text; 

     } 
    } 

    protected override void OnMouseDown(MouseButtonEventArgs e) 
    { 
     if (e.ClickCount == 2 && _isEditMode == false) 
     { 
      _textBox.Visibility = Visibility.Visible; 
      Keyboard.Focus(_textBox); 
     } 
     base.OnMouseDown(e); 
    } 

    bool _isEditMode; 
    TextBox _textBox; 
    Label _label; 
} 

Hat es nicht testen, sollten aber funktionieren.

Verwandte Themen