从列表框中删除项目时出现问题

时间:2012-01-12 08:02:13

标签: windows-phone-7 listbox contextmenu

我想要实现的行为是按住一个列表框项目,我应该能够删除该项目。 我已经通过代码创建了列表框。 Everylistitem有一个stackpanel,它包含两个文本块,即日期和字符串。

我怎样才能获得选定的列表项目的按住事件?我没有在任何地方使用绑定。

C#:

for (int i = 0; i < iHistCount; i++)
{
    TextBlock dateText = new TextBlock();
    TextBlock durationText = new TextBlock();
    TextBlock spacer = new TextBlock();
    TextBlock spacer2 = new TextBlock();

    dateText.FontFamily = (FontFamily)App.Current.Resources["CicleFina"];
    durationText.FontFamily = (FontFamily)App.Current.Resources["CicleFina"];

    dateText.FontSize = 25;
    durationText.FontSize = 25;

    dateText.TextAlignment = TextAlignment.Right;
    durationText.TextAlignment = TextAlignment.Left;

    dateText.VerticalAlignment = System.Windows.VerticalAlignment.Center;
    durationText.VerticalAlignment = System.Windows.VerticalAlignment.Center;

    spacer.Width = 30;
    dateText.Width = 130;
    spacer2.Width = 50;
    durationText.Width = 170;
    DateTime dtHist = pCycMan.GetHistoryDate(i);
    strDisplay = dtHist.ToString("dd-MMM-yyyy");
    dateText.Text = strDisplay;
    if( condition)
    {
        // logic
        durationText.Text = strDisplay;
    }

    StackPanel st = new StackPanel();
    st.Height = 50;
    st.Orientation = System.Windows.Controls.Orientation.Horizontal;
    st.Children.Add(spacer);
    st.Children.Add(dateText);
    st.Children.Add(spacer2);
    st.Children.Add(durationText);
    listboxHistory.Items.Add(st);
}

XAML

<ListBox x:Name="listboxHistory" Height="280" Canvas.Left="60" Canvas.Top="232" Width="360" Foreground="Gray">

1 个答案:

答案 0 :(得分:2)

假设您正在使用Silverlight工具包进行上下文菜单,此链接就是一个很好的示例,并且如何在代码隐藏中创建菜单。

http://windowsphonegeek.com/articles/WP7-ContextMenu-in-depth--Part1-key-concepts-and-API

例如:

StackPanel st = new StackPanel();
            st.Height = 50;
            st.Orientation = System.Windows.Controls.Orientation.Horizontal;
            st.Children.Add(spacer);
            st.Children.Add(dateText);
            st.Children.Add(spacer2);
            st.Children.Add(durationText);
            listboxHistory.Items.Add(st);

ContextMenu cm = new ContextMenu();
 MenuItem delete = new MenuItem()
    {
        Header = "Delete",
        Tag= "Delete" //you could also put the item itself here, would be a good reference

    };
 delete.Clicked += //your event handler
 MenuItem edit = new MenuItem()
    {
        Header = "Edit",
        Tag = "Edit", //you could also put the item itself here, would be a good reference
    };
edit.Clicked += //your event handler


//add the items to the context menu.
cm.Items.Add(delete);
cm.Items.Add(edit);

ContextMenuService.SetContextMenu(st, cm);