Исключение «Элемент уже является потомком другого элемента». при переходе к виду запуска - PullRequest
0 голосов
/ 31 марта 2011

Я использую Region Navigation, интегрированную с Silverlight Frame Navigation следующим образом: у меня есть frame , к которому я прикрепил region , и установил ContentLoader в FrameContentLoader, которое я получил из примера Карла Шифлетта :

<navigation:Frame 
    x:Name="ContentFrame" 
    Style="{StaticResource ContentFrameStyle}" 
    Source="/Home" 
    Navigated="ContentFrame_Navigated" 
    NavigationFailed="ContentFrame_NavigationFailed"
    prism:RegionManager.RegionName="MainContentRegion">

    <navigation:Frame.ContentLoader>
        <prism_Regions:FrameContentLoader RegionName="MainContentRegion"/>
    </navigation:Frame.ContentLoader>

    <navigation:Frame.UriMapper>
      <uriMapper:UriMapper>
         <uriMapper:UriMapping Uri="" MappedUri="/MyProject.Views.Home" />
         <uriMapper:UriMapping Uri="/{pageName}" MappedUri="/MyProject.Views.{pageName}" />
      </uriMapper:UriMapper>
    </navigation:Frame.UriMapper>
</navigation:Frame>

Я получаю следующее исключение: «Элемент уже является потомком другого элемента». , вот трассировка стека:

   at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
   at MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, DependencyObject doh)
   at MS.Internal.XcpImports.SetValue(IManagedPeerBase doh, DependencyProperty property, Object obj)
   at System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)
   at System.Windows.DependencyObject.SetEffectiveValue(DependencyProperty property, EffectiveValueEntry& newEntry, Object newValue)
   at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
   at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet)
   at System.Windows.Controls.ContentControl.set_Content(Object value)
   at System.Windows.Navigation.NavigationService.CompleteNavigation(DependencyObject content)
   at System.Windows.Navigation.NavigationService.ContentLoader_BeginLoad_Callback(IAsyncResult result)

это происходит всякий раз, когда я пытаюсь перейти к представлению Home , тогда как все остальные запросы на навигацию завершаются успешно! Чтобы убедиться, что проблема не в самом представлении , я попытался заменить Home на About , который является существующим представлением (делая его представлением при запуске) , но проблема все еще существует! Теперь я могу перейти к Home , но не About .

что может вызвать такую ​​проблему?

PS: проблема сохраняется даже после того, как я удалил присвоение свойства Source для Frame и по умолчанию UriMapper (первое). При этом у меня появляется ошибка при первом посещении, остальные работают нормально.

1 Ответ

0 голосов
/ 21 апреля 2011

Я наконец наткнулся на «реальную причину» этой проблемы!

Я нашел следующие строки в своем App.xaml

protected virtual void InitializeRootVisual()
{
    BusyIndicator busyIndicator = new BusyIndicator();
    busyIndicator.Content = new Shell();
    busyIndicator.HorizontalContentAlignment = HorizontalAlignment.Stretch;
    busyIndicator.VerticalContentAlignment = VerticalAlignment.Stretch;
    this.RootVisual = busyIndicator;
}

Я не совсем уверен, что на самом деле произошло здесь, что вызвало проблему (возможно, кто-то может просветить меня об этом), но устранение этой проблемы решило проблему.

Я надеюсь, что это когда-нибудь может помочь кому-то (возможно, «будущему мне»):)

...