2017-02-09 74 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; 
} 

没有测试,但应该工作。