2016-03-07 17 views
5

Przystosowanie projektu do Template10, Przejdę do odziedziczonych stylów w App.xaml.Dodawanie stylu BasedOn na App.xaml ulega awarii w App() {InitializeComponent(); }

Wygląda na to, że Template10 nie obsługuje stylów dziedziczonych ani rozszerzonych. Starałem się rozszerzyć SubTitleStyle z TitleStyle ale pojawia się wyjątki COM na GetXamlType w XamlTypeInfo.g.cs

My 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> 

informacji Wyjątek:

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

Edytuj pytanie, aby podać rzeczywisty kod źródłowy. Nie zamieszczaj linków do zdjęć swojego kodu. Jeśli chodzi o twój problem, powinieneś bardziej szczegółowo opisać, co się dzieje, gdy uruchamiasz swój kod. Czy otrzymujesz jakieś komunikaty o błędach? Co oni mówią? – Kenster

+0

Uaktualniam moje pytanie, podając więcej szczegółów. Wszelkie sugestie na więcej szczegółów są mile widziane :). Dzięki! – soydachi

Odpowiedz

2

To było dla mnie bardzo skomplikowane. Z łatwością udało mi się to odtworzyć. A potem byłem w stanie łatwo odtworzyć ten bez odniesienia do szablonu 10. Kod wykraczająca jest ten blok w 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; 
} 

Można by uprościć go do tego:

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

Umieszczony w OnLaunched aplikacji dowolnej aplikacji. Bum. Sam błąd pojawia się, gdy próbujemy uzyskać dostęp do kolekcji zasobów, ale tylko wtedy, gdy do zasobów dodano styl BasedOn.

Po usiądzie z zespołem peronowym, aby spróbować i potwierdzić szablon 10, wszyscy wokół stołu zaczęli drapać się po głowach. I wtedy zdałem sobie sprawę, że @dachibox odkrył prawdziwy błąd na platformie XAML.

Oto tylko prąd obejście dopóki nie zaktualizować szablon 10.

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

Chodzi mi o to, zrobić pracę na stronie zamiast w App. W jaki sposób naprawimy szablon 10 bez naprawy platformy XAML? Spójrz na ten kod wonky będziemy używając w inicjującego:

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; 
} 

Błąd przynajmniej jest w majątku hrabiego iterator, który wydaje się zwiększać, a nie ubytek jak iterację niego. Szalony huh? Okazuje się, że ta ścieżka iteracji nie jest częstym przypadkiem użycia. Ale to nie ma znaczenia, podnieśliśmy flagę dzięki pańskiemu pytaniu.

Zaktualizuję szablon 10 z poprawką w tym tygodniu.

Powodzenia, Jerry

+0

Wow! Cieszę się, że mogłem wnieść wkład w platformę XAML. Jeśli potrzebujesz więcej informacji, nie wahaj się zapytać mnie. – soydachi

+0

Wow, właśnie uderzyłem w ten sam błąd. Tak długo, jak moje style nie są "BasedOn" nic więcej, jestem dobry, aby przejść. – akshay2000

Powiązane problemy