wpf 右鍵ListBox可編輯


之前wpf項目用到listbox右鍵編輯的功能,想到當時找資料不好找,特地將自己的結果拿出來與大家分享,探討。

首先添加一個listbox。
  <ListBox x:Name="List_lianxiren" MouseDown="List_lianxiren_MouseDown"  SelectionMode="Extended" Margin="15,0" />

后台代碼:

TextBox txtNode = new TextBox();
ListBoxItem selectNode = null;

string olddata;

//綁定數據到listboxitem;其中array不僅僅局限於數組,此處用數組舉例而已;
public void BindingData()
{
        ListBoxItem tvi;
            MenuItem menuitem;
            ContextMenu contextmenu;
            for (int i = 0; i < Array.Length; i++)
            {
                tvi = new ListBoxItem();

                tvi.Content = Array[i].Owner;
                tvi.Name = "_" + Array[i].id.ToString();

                contextmenu = new System.Windows.Controls.ContextMenu();
                menuitem = new MenuItem();
                menuitem.Header = "編輯";
                menuitem.Click += new RoutedEventHandler(menuitem_Click);
                contextmenu.Items.Add(menuitem);
                contextmenu.Width = 130;
                tvi.ContextMenu = contextmenu;
                tvi.GotFocus += new RoutedEventHandler(tvi_GotFocus);////
                List_lianxiren.Items.Add(tvi);
            }

}

//編輯框失去焦點方式一
private void List_lianxiren_MouseDown(object sender, MouseButtonEventArgs e)
{ EditNameSaveToServer(); }

//點擊編輯按鈕,變為編輯框

 void menuitem_Click(object sender, RoutedEventArgs e)
{
            selectNode = List_lianxiren.SelectedItem as ListBoxItem;

            txtNode = new TextBox();
            if (!(selectNode.Content is TextBox))
            {
                olddata= selectNode.Content.ToString();
                txtNode.Text = selectNode.Content.ToString();
                txtNode.MaxLength = 20;
                txtNode.Focus();
                selectNode.Content = txtNode;
            }
}

//編輯框失去焦點方式二

void tvi_GotFocus(object sender, RoutedEventArgs e)
{
            if (selectNode == null)
            {
                selectNode = sender as ListBoxItem;
                txtNode = new TextBox();
                txtNode.Text = selectNode.Content.ToString();
                olddata= selectNode.Content.ToString();
            }
            EditNameSaveToServer();
}

//編輯框失去焦點后的處理事件,將數據保存到服務器什么的處理。
private void EditNameSaveToServer()
{
            if (!string.IsNullOrWhiteSpace(txtNode.Text))
            {
                selectNode.Content = txtNode.Text;
            }
            else
            {
                selectNode.Content = olddata;
            }
}

 

 

個人小站歡迎來踩:駕校教練評價平台 | 為愛豆砌照片牆

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM