2012-12-08 34 views
0

我有一個自定義列表框。一些藏品的商品有「名稱」,「文字」,「圖片」和「網址」字段。其他可能有其他字段(使用模板選擇器)。所以,如果item具有字段「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

您可以調用圖像發件人的Parent以獲取其容器(或多次調用,取決於您的xaml的結構),然後查看容器的Children以查找您正在查找的文本框。例如,也許你想要做這樣的事情(在xaml中設置包含url的文本框的Tag屬性)。

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

或者,如果你只是想一個始終可用的參考列表框,只需將其x:Name = "_MyListbox"在XAML中,它會成爲類的字段。

作爲最後的選擇,我認爲它可能會更容易綁定到ListBox.SelectedItem,以便您總是有一些屬性包含當前選擇的New項目。

+0

嘗試類似於'New tmp =((sender as Image).Parent.',但我無法看到我的項目的任何屬性,只有默認的方法 – eg01st

+0

您必須將父項轉換爲其父項的任何類型(即Panel ,StackPanel等),因爲'FrameworkElement.Parent'的返回類型是一個'DependencyObject'。 – ceyko

+0

另外,我應該提到你應該通過'(Image)sender'而不是'as'來推理。因爲失敗的行爲,它會立即拋出一個轉換異常*,如果'as'將返回null,如果它不是正確的類型,這可能導致在該行的某個地方產生'NullReferenceException'。 – ceyko

相關問題