2015-05-13 3 views
0

У меня есть код, где я получаю текст текстового блока. Я делаю это в событии удержания, используя этот код txt = (e.OriginalSource as TextBlock).Text;, но иногда он возвращает мне эту ошибку «Исключение типа« Исключение System.NullReferenceException »произошло в Barcode_QRCode.WindowsPhone.exe, но не обрабатывалось в коде пользователя« и иногда работает просто отлично » , Кто-нибудь может помочь мне здесь?e.OriginalSource is null

мой код:

private void ListViewItem_Holding(object sender, HoldingRoutedEventArgs e) 
{ 
    txt = (e.OriginalSource as TextBlock).Text;  

    MenuFlyout menu = new MenuFlyout(); 
    MenuFlyoutItem item1 = new MenuFlyoutItem(); 
    MenuFlyoutItem item2 = new MenuFlyoutItem(); 
    MenuFlyoutItem item3 = new MenuFlyoutItem(); 

    item1.Text = "Copiar"; 
    item2.Text = "Deletar"; 
    item3.Text = "Compartilhar"; 

    item1.Click += MenuFlyout_Copiar; 
    item2.Click += MenuFlyout_Deletar; 
    item3.Click += MenuFlyout_Compartilhar; 

    menu.Items.Add(item1); 
    menu.Items.Add(item2); 
    menu.Items.Add(item3); 

    menu.ShowAt((FrameworkElement)sender); 
} 
+1

Его трудно помочь вам с предоставленной информацией. Все, что я могу сказать, это то, что оператор 'as' возвращает null, если он не может преобразовать левую сторону в правую сторону. Вы можете проверить, что 'e.OriginalSource' не является нулевым и что преобразование не является нулевым, прежде чем пытаться получить из него свойство' .Text'. –

+0

@ JoséAugustoAcorsi это не означает, что 'OriginalSource' равно null? Вы подтвердили, что это так? Это также может означать, что это не 'TextBlock', в этом случае' e.OriginalSource как TextBlock' даст вам значение null – dkozl

ответ

0

Может быть, иногда OriginalSource вы получаете не TextBlock, который заставит вас бросить, чтобы вернуть нуль. Вы должны проверить тип вашего OriginalSource, прежде чем пытаться использовать его так:

var textBlock = e.OriginalSource as TextBlock; 
if(textBlock != null) 
{ 
    .... 
} 
1

Проверьте, если e.OriginalSource является недействительным, прежде чем пытаться бросить и присвоить значение:

Private void ListViewItem_Holding(object sender, HoldingRoutedEventArgs e) 
    { 
    txt = (e.OriginalSource != null ? (e.OriginalSource as TextBlock).Text : "");  

    MenuFlyout menu = new MenuFlyout(); 
    MenuFlyoutItem item1 = new MenuFlyoutItem(); 
    MenuFlyoutItem item2 = new MenuFlyoutItem(); 
    MenuFlyoutItem item3 = new MenuFlyoutItem(); 

    item1.Text = "Copiar"; 
    item2.Text = "Deletar"; 
    item3.Text = "Compartilhar"; 

    item1.Click += MenuFlyout_Copiar; 
    item2.Click += MenuFlyout_Deletar; 
    item3.Click += MenuFlyout_Compartilhar; 

    menu.Items.Add(item1); 
    menu.Items.Add(item2); 
    menu.Items.Add(item3); 

    menu.ShowAt((FrameworkElement)sender); 
    }