2016-03-07 6 views
5

Adattando un progetto a Template10, vado in stili ereditati in App.xaml stanno andando in crash.L'aggiunta dello stile BasedOn su App.xaml si interrompe su App() {InitializeComponent(); }

Sembra Template10, non supporta stili ereditati o estesi. Stavo cercando di estendere la SubTitleStyle da TitleStyle ma ottengo un COM eccezioni sulla GetXamlType in XamlTypeInfo.g.cs

mio App.xaml.cs

sealed partial class App : BootStrapper 
{ 
    public App() { InitializeComponent(); } 

    public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args) 
    { 
     NavigationService.Navigate(typeof(ShellView)) 
     await Task.CompletedTask; 
    } 
} 

My App. XAML

<Style x:Key="TitleStyle" TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="{StaticResource TextTitleForeground}"/> 
    <Setter Property="FontSize" Value="26"/> 
    <Setter Property="TextWrapping" Value="Wrap"/> 
    <Setter Property="FontWeight" Value="Medium"/> 
</Style> 
<Style x:Key="SubTitleStyle" TargetType="TextBlock" BasedOn="{StaticResource TitleStyle}"> 
    <Setter Property="Foreground" Value="{StaticResource TextForeground}"/> 
    <Setter Property="FontSize" Value="20"/> 
</Style> 

informazioni Eccezione:

Error HRESULT E_FAIL has been returned from a call to a COM component. 

at System.Runtime.InteropServices.WindowsRuntime.IIterator`1.MoveNext() 
at System.Runtime.InteropServices.WindowsRuntime.IteratorToEnumeratorAdapter`1.MoveNext() 
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext() 
at Template10.Common.BootStrapper.<InitializeFrameAsync>d__77.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at Template10.Common.BootStrapper.<InternalLaunchAsync>d__53.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_0(Object state) 
at System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore() 
+2

Si prega di modificare la tua domanda per contenere il codice sorgente. Non collegare alle immagini del tuo codice. Per quanto riguarda il tuo problema, dovresti essere più chiaro su cosa sta succedendo quando esegui il tuo codice. stai ricevendo qualche messaggio di errore? Cosa dicono? – Kenster

+0

Ho aggiornato la mia domanda con ulteriori dettagli. Qualsiasi suggerimento per maggiori dettagli sono i benvenuti :). Grazie! – soydachi

risposta

2

Questo mi ha profondamente turbato. Sono stato facilmente in grado di riprodurre questo. E, poi, sono stato facilmente in grado di riprodurre questo senza un riferimento a Template 10. Il codice incriminato è questo blocco T10:

// title 
foreach (var resource in Application.Current.Resources 
    .Where(x => x.Key.Equals(typeof(Controls.CustomTitleBar)))) 
{ 
    var control = new Controls.CustomTitleBar(); 
    control.Style = resource.Value as Style; 
} 

Si potrebbe semplificare a questo:

var a = Application.Current.Resources.ToArray(); 

Collocato in il OnLaunched dell'applicazione di qualsiasi app. Boom. L'errore si verifica quando stiamo tentando di accedere alla raccolta delle risorse ma solo quando uno stile BasedOn è stato aggiunto alle risorse.

Dopo essersi seduti con il team della piattaforma per provare a rivendicare il Modello 10, tutti attorno al tavolo hanno iniziato a grattarsi la testa. E, quando ho realizzato @dachibox, hai scoperto un bug autentico nella piattaforma XAML.

Ecco l'unica soluzione corrente fino a quando aggiorniamo Template 10.

<Page.Resources> 
    <ResourceDictionary Source="..\Styles\Custom.xaml" /> 
</Page.Resources> 

Quello che voglio dire è, si fa il lavoro nella pagina invece che in App. Quindi, come sistemeremo Template 10 senza che la piattaforma XAML venga riparata? Date un'occhiata a questo codice wonky useremo nel programma di avvio automatico:

int count = Application.Current.Resources.Count; 
foreach (var resource in Application.Current.Resources) 
{ 
    var k = resource.Key; 
    if (k == typeof(Controls.CustomTitleBar)) 
    { 
     var s = resource.Value as Style; 
     var t = new Controls.CustomTitleBar(); 
     t.Style = s; 
    } 
    count--; 
    if (count == 0) break; 
} 

L'errore, almeno, è in proprietà conteggio del iteratore che sembra aumentare, invece di decremento come eseguire iterazioni attraverso di essa. Pazzesco eh? Risulta, questo percorso di iterazione non è un caso d'uso comune. Ma non importa adesso, abbiamo alzato la bandiera grazie alla tua domanda qui.

aggiornerò Template 10 con la correzione a volte questa settimana.

Buona fortuna, Jerry

+0

Wow! Sono felice di poter contribuire alla piattaforma XAML. Se hai bisogno di ulteriori dettagli, non esitare a chiedermelo. – soydachi

+0

Wow, ho appena colpito lo stesso bug. Finché i miei stili non sono 'BasedOn' nient'altro, sono a posto. – akshay2000

Problemi correlati