如何在事件“点击”后获取列表框项的属性

时间:2012-12-08 17:17:04

标签: c# wpf windows-phone-7

我有一个自定义列表框。一些集合的项目具有“名称”,“文本”,“图像”和“URL”字段。其他可能有其他字段(使用模板选择器)。因此,如果项目具有字段“name”,“text”,“url”和“image” - 它在列表框中显示为2个文本块和1个图像。当我点击图像时 - 程序必须打开新窗口,打开webBrowser并转到项目属性“url”中的url。我理解如何将信息从一个页面传输到另一个页面,但我无法理解如何从项目中获取“url”。我试过了

    private void Video_Tap(object sender, GestureEventArgs e) // event when tap on the image
    {
        New tmp = ((sender as ListBox).SelectedItem as New); // New - is the type of collection's item
        string vid = tmp.Video.url; // Video has fields "image" and "url"

        string destination = string.Format("/Video_Page.xaml?uri={0}", vid );
        NavigationService.Navigate(new Uri(destination, UriKind.Relative));
    }

但发件人有图像类型。

1 个答案:

答案 0 :(得分:1)

您可以调用图像发件人的Parent来获取其容器(或多次调用它,具体取决于您的xaml的结构),然后查看容器Children找到您要找的文本框。例如,您可能想要执行此类操作(在xaml中设置包含您的网址的文本框的Tag属性)。

var grid = (Grid) ((Image) sender).Parent;
foreach (var child in grid.Children)
{
    if (child is TextBox && ((TextBox) child).Tag == "URL")
    {
        return (Textbox) child;
    }
}

或者,如果您只想要一个始终可用的ListBox引用,只需在xaml中设置它的x:Name = "_MyListbox",它就会成为该类的一个字段。

作为最后一个选项,我认为您可能更容易绑定到ListBox.SelectedItem,因此您总是拥有一些包含当前所选New项的属性。< / p>