c# - Falla en la producción cuando se usa un WebBrowser dentro de un Pivot
windows-phone-7 windows-phone-8 (1)
Sé que es una mala idea poner un WebBrowser dentro de un control Pivot / RadSlideView. Lo hice de todos modos:
<phone:PhoneApplicationPage
x:Class="**.HtmlView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
mc:Ignorable="d"
Style="{StaticResource LeafPageNavigationStyle}">
<controls:Pivot x:Name="Html" ItemsSource="{Binding Items}"
Style="{StaticResource HeaderlessPivot}">
<controls:Pivot.ItemTemplate>
<DataTemplate>
<phone:WebBrowser Source="{Binding}" />
</DataTemplate>
</controls:Pivot.ItemTemplate>
</controls:Pivot>
</phone:PhoneApplicationPage>
Básicamente quiero usar el Pivot para deslizarme a través de una matriz de documentos HTML en los URI que proporciono a través de mi ViewModel, que simplemente envuelve la matriz en un Caliburn.Micro OneActive Conductor:
namespace DSBMobile.ViewModels
{
public class HtmlViewModel : Conductor<Uri>.Collection.OneActive
{
private readonly IUnburyableState<Uri[], HtmlViewModel> _state;
public HtmlViewModel(IUnburyableState<Uri[], HtmlViewModel> state)
{
_state = state;
Items.AddRange(_state.State.ForceGetValue());
}
}
}
Eso funciona bastante bien en las versiones de depuración y liberación que implemento manualmente. La aplicación supera todas las pruebas impuestas por la Tienda, pero tan pronto como trato de abrir esta vista específica dentro de la aplicación, se bloquea sin posibilidad de redireccionar a un Telerik MessageBox.
Tan pronto como elimine el pivote externo y ajuste el ViewModel en consecuencia, se ejecuta sin problemas. Como dije antes, el accidente solo ocurre en producción. El controlador Application.UnhandledException no puede hacer que la aplicación se trague la excepción y muestre el error.
Esto es realmente intrincado y me molesta desde hace meses. ¿Alguien puede resolver este error o señalarme en una dirección que valga la pena? También agradecería una sugerencia más WP-ish para mostrar múltiples enlaces web que funciona.
Resultó que obtuve una AccessException no autorizada, que explicaba que me faltaba la capacidad ID_CAP_WEBBROWSERCOMPONENT, que no era. Eso me confundió, hasta que finalmente eché un vistazo a los documentos :
Cuando crea un control WebBrowser en XAML, debe especificar un valor para la propiedad P: System.Windows.FrameworkElement.Name para ese control, de modo que la Herramienta de detección de capacidad de Windows Phone pueda detectar y otorgar las capacidades correctas para su aplicación. Para obtener más información sobre la Herramienta de detección de capacidad de Windows Phone, consulte Cómo determinar las capacidades de la aplicación.
Con el conjunto x: Name, finalmente podría tener una experiencia sin complicaciones. Para mí personalmente, este fue el error más molesto de todos los tiempos. Me ayudó mucho poder subir versiones beta en la tienda, aunque no pagué ninguna tarifa de desarrollador, que no conocía de antemano.
TLDR: RTFM.