2017-02-09 26 views
2

XAML添加動態文本框列表框裏面

<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> 

當我雙擊了listboxitems,標籤轉向使用該文本框的變化listboxitems這是selected.Then我點擊進入文本框變成改變文本框再次是一個標籤。如何在列表框中添加dynamictextbox,該列表框綁定了代碼隱藏的值。

回答

0

你想要這樣的東西。將兩個控件放入數據模板中併合攏。

然後在代碼後面切換可見性屬性。兩者都綁定到相同的屬性,因此會保持彼此同步。

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}"/> 

代碼背後

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

創建自定義網格,並使用它:

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; 
} 

沒有測試,但應該工作。