2012-03-03 16 views
10

menüsündeki menüyü açmak için, Listbox'ta dosyaları kaldırmak için sağ tıklayıp Sil gibi bir menüyü açmak istiyorum. Şu andaListbox'tan öğeye sağ tıklayıp WPF

i sağ benim liste kutusu

private void listBoxFiles_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 

} 

içindeki öğenin üzerine tıkladıktan sonra bu fonksiyonu var ve sağ

  <ListBox.ContextMenu> 
       <ContextMenu>               
        <MenuItem Header="Delete"/> 
       </ContextMenu> 
      </ListBox.ContextMenu> 

benim ListBox dosyayı silmek işlevi tıkladıktan sonra XAML menüsünü Sil'de i uygulamak:

private void MenuItemDelete_Click(object sender, RoutedEventArgs e) 
{    
    if (listBoxFiles.SelectedIndex == -1) 
    { 
     return; 
    } 

    //string filePath = (listBoxFiles.SelectedItem).ToString(); 
    int index = listBoxFiles.SelectedIndex; 
    listBoxFiles.Items.RemoveAt(index); 
} 

cevap

1

listBoxFiles_PreviewMouseRightButtonDownEğer

<ListBox> 
      <ListBox.ContextMenu> 
       <ContextMenu> 
        <MenuItem Header="Delete"></MenuItem> 
       </ContextMenu> 
      </ListBox.ContextMenu> 
     </ListBox> 

yazdığında sağ Zaten biçimlendirmeye sahip bir bağlam menüsü

+0

sayesinde ben akşam ve güncelleme de bu çalışacaktır. – user979033

+0

Tamam teşekkürler, şimdi tıklattığım dosya adını (yolu) nasıl "yakalayabilirim"? – user979033

+0

Menüde 3 fonksiyon eklemek istiyorum (menüdeki her bir seçenek farklı işlevlere sahip olacaktır) bu yüzden hangi öğenin tıklandığını kontrol etmek gerekiyor? ve fonksiyonun son 2 satırını anlamadım MenuItemDelete_Click – user979033

27

tıkladıktan sonrazaten çalışıyor.

Bir işlem yapmak isterseniz, yollardan birinin menüde Tıklat işlevinde hangi öğenin tıklandığını kontrol etmektir.

<ListBox Name="someListBox"> 
    <ListBox.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="Delete" Click="MenuItemDelete_Click"/> 
     </ContextMenu> 
    </ListBox.ContextMenu> 

    <ListBoxItem>...</ListBoxItem> 
    <ListBoxItem>...</ListBoxItem> 
    <ListBoxItem>...</ListBoxItem> 

</ListBox> 

Ve işlevi sonraki olabilir: İşte

senin liste başka bir versiyonudur:

private void MenuItemDelete_Click(object sender, RoutedEventArgs e) 
{ 
    if (someListBox.SelectedIndex == -1) return; 

    // Hypothetical function GetElement retrieves some element 
    var element = GetElement(someListBox.SelectedIndex); 

    // Hypothetical function DeleteElement 
    DeleteElement(element); 
} 

5 Mart 2012 Güncellendi Örneğin, bir sonraki liste vardır. Liste kutusuna değil, liste kutusu öğelerine bir bağlam menüsü ekleyebilirsiniz. Örneğin:

<ListBox Name="someListBox" MouseDown="someListBox_MouseDown"> 
    <ListBox.Resources> 

     <!--Defines a context menu--> 
     <ContextMenu x:Key="MyElementMenu"> 
      <MenuItem Header="Delete" Click="MenuItemDelete_Click"/> 
     </ContextMenu> 

     <!--Sets a context menu for each ListBoxItem in the current ListBox--> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="ContextMenu" Value="{StaticResource MyElementMenu}"/> 
     </Style> 

    </ListBox.Resources> 
    <ListBoxItem>...</ListBoxItem> 
    <ListBoxItem>...</ListBoxItem> 
    <ListBoxItem>...</ListBoxItem> 
</ListBox> 

1) Eğer liste kutusunda boş bir alanda sağ tıklandığında tüm öğeleri unsellect olacaktır Bu fonksiyon: Eğer lisboxt öğesini tıkladığınızda

private void someListBox_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    someListBox.UnselectAll(); 
} 

2), bu mavi. Liste kutusu öğesini sağ tıklattığınızda, hala mavi, ancak bir içerik menüsü görüntülenirse, liste kutusu gri olur, belki de bu öğe bir odağı kaybettiği için olur.

3) işlevini silme çalışıyor:

private void MenuItemDelete_Click(object sender, RoutedEventArgs e) 
{ 
    if (someListBox.SelectedIndex == -1) 
    { 
     return; 
    } 

    someListBox.Items.RemoveAt(someListBox.SelectedIndex); 
} 
+0

teşekkürler bakın, ben bunu akşamları deneyin ve güncelleyin. – user979033

+0

Menüye 3 fonksiyon eklemek istiyorum, bu yüzden hangi öğenin tıklandığını kontrol etmek için hala gerekli? ve fonksiyonun son 2 satırını anlamadım MenuItemDelete_Click – user979033

+0

Menüde 3 fonksiyon eklemek istiyorum (menüdeki her bir seçenek farklı fonksiyonlara sahip olacaktır) bu yüzden hangi öğenin tıklandığını kontrol etmek gerekiyor? ve fonksiyonun son 2 satırını anlamadım MenuItemDelete_Click – user979033