2016-04-12 3 views
4

Meine CommandBar hat ihre IsOpen-Eigenschaft in XAML auf True gesetzt und daher ist der Text für jede Schaltfläche sichtbar, da die Beschreibungen sichtbar bleiben sollen.Keine installierten Komponenten wurden erkannt. TargetName HighContrastBorder kann nicht aufgelöst werden - UWP Windows 10

Wenn ich Ellipsen Taste auf, versteckt es den Text und das zweite Mal, dass ich darauf klicken, bekomme ich folgende Fehlermeldung:

No installed components were detected. Cannot resolve TargetName HighContrastBorder.

Es ist etwas umständlich mit dem UI los und vielleicht ist es im Zusammenhang mit dieser, aber ich kann nicht herausfinden, was oder warum:

enter image description here

Wie Sie meine Knöpfe Text sind schnitt- sehen für die verschiedenen Tasten off ich die Anzeige:

-Code weise, gibt es nichts besonderes an sich, soweit ich sehen kann:

<Page.BottomAppBar> 
    <CommandBar IsOpen="True" 
       ClosedDisplayMode="Compact" 
       IsSticky="True" 
       Visibility="{Binding 
       CommandBarViewModel.IsCommandBarVisible, 
       Converter={StaticResource BoolToVisibilityConverter}}" 
       Background="{ThemeResource SystemControlBackgroundAccentBrush}"> 

     <AppBarButton 
      Icon="Add" 
      Label="Add" 
      Foreground="White" 
      Command="{Binding CommandBarViewModel.AddCommand}" 
      Visibility="{Binding CommandBarViewModel.IsAddVisible, 
         Converter={StaticResource BoolToVisibilityConverter}}"/> 

     <AppBarButton 
      Icon="Refresh" 
      Label="Refresh" 
      Foreground="White" 
      Command="{Binding CommandBarViewModel.RefreshListCommand}" 
      Visibility="{Binding 
      CommandBarViewModel.IsRefreshListVisible, 
      Converter={StaticResource BoolToVisibilityConverter}}"/> 
    </CommandBar> 
</Page.BottomAppBar> 

Ther e ist kein Innerexception und die Ausnahme von App.g.i.cs

#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION 
UnhandledException += (sender, e) => 
     { 
      if (global::System.Diagnostics.Debugger.IsAttached) 
      global::System.Diagnostics.Debugger.Break(); 
     }; 
#endif 

beide Irgendwelche Ideen über meine Frage heißt Text Cut-off und nicht behandelte Ausnahme ausgelöst wird?

Dank

UPDATE - 1:

Wenn ich die binded Eigenschaft entfernen (CommandBarViewModel.IsCommandBarVisible) von der Visible Eigenschaft für das CommandBar und codieren es Visible, bewegt sich der Fehler auf der ganzen Linie und statt in den App.gics passiert, ist es nun verbindliche Eigenschaft der ersten Schaltfläche, die es versucht, die Sichtbarkeit auf zu setzen, dh

Ich

Aber dieses Mal die folgende Fehlermeldung erhalten:

An exception of type 'System.Runtime.InteropServices.COMException' 
occurred in GalaSoft.MvvmLight.dll but was not handled in user code 

WinRT information: Cannot resolve TargetName HighContrastBorder. 

Additional information: No installed components were detected. 

ähnlich wie Sie sehen können, aber es scheint von MVVMLight zu kommen ??? Macht keinen Sinn!

Irgendwelche Vorschläge/Ideen zur Lösung?

UPDATE - 2:

Wenn ich alle Sichtbarkeit Eigenschaften entfernen (und deren entsprechende Bindung), wird der Befehl entsprechend angezeigt (dh nicht mehr abgeschnittener Text), und ich kann auf der Ellipsen-Taste klicken immer und immer wieder und es stürzt nicht mehr !!

Also es ist definitiv mit der Sichtbarkeit verbunden und bindet es an eine Eigenschaft an das Ansichtsmodell, aber was genau, habe ich keine Ahnung.

Könnte es sein, dass das ViewModel nur erstellt wird, wenn die Seite geladen wird, und es zu diesem Zeitpunkt für die CommandBar zu spät ist und die Schaltflächen korrekt initialisiert werden.

Odd als alles in Bezug auf das Anzeigen/Hidding Tasten funktioniert wie erwartet, außer dass mein Text abgeschnitten ist und ich nicht auf die Schaltfläche Ellipsen klicken kann oder es stürzt ab.

UPDATE - 3:

fand ich ein Work-around und ich sprang nicht und darüber nach unten, wie ich es falsch ist das Gefühl, aber jetzt wird es tun. Um diesen Fehler zu umgehen, stelle ich sicher, dass ich die Befehlsleiste und die Schaltflächen sichtbar mache, wenn ich mein ViewModel initialisiere, und verstecke es dann entsprechend der Seite, auf der es sich befindet.

public class AppShellViewModel { public void AppShellViewModel { this.CommandBarViewModel.IsCommandBarVisible = true; this.CommandBarViewModel.IsAddVisible = true; this.CommandBarViewModel.IsRefreshVisible = true; this.CommandBarViewModel.IsCancelVisible = true; }

... 

\\Hide buttons accordingly in the various parts of your app. 
this.CommandBarViewModel.IsCancelVisible = false; 

}

Persönlich fühle ich mich wie es ist ein Fehler mit dem CommandBar-Steuerelement und Tasten wie ich in der Lage sollte es (und seine Tasten) zu verstecken aus den ihnen gehen und es soll

a) in der Lage sein, dies fehlerfrei zu handhaben. b) in der Lage sein, sich selbst korrekt neu zu zeichnen, ohne Text abgeschnitten zu haben.

Ich könnte natürlich falsch liegen und es könnte etwas mit meinem Code zu tun haben, aber aus meiner Sicht, entfernt die Sichtbarkeit Binding es und macht es sichtbar macht es zunächst zu beheben, so scheint es auf diese Weise nach unten zeigen.

UPDATE - 4:

Hier ist der eigentliche Code. Ich habe es so weit wie möglich vereinfacht (d. H. Namespaces, DataTemplates, Hauptinhalt usw. entfernt) und nur die CommandBar und ihre Schaltflächen übrig gelassen. Hoffentlich wird das helfen.

Wie Sie bei der Verwendung von mvvmlight sehen können, ist meine Quelle auf Locator gesetzt und mein Pfad ist auf die entsprechende ViewModel, in diesem Fall AppShellViewModel, eingestellt. Doch

wie Grace erklärt, wenn ich x verwenden: binden statt Bindung, bekomme ich folgende Fehlermeldung:

Invalid binding path 'CommandBarViewModel.IsCommandBarVisible' : 
Property 'CommandBarViewModel' can't be found on type 'AppShell'  
MyApp ..\MyApp\Views\AppShell.xaml 


XAML-Code:

<Page.Resources> 
     <converters:NullToVisibilityConverter x:Key="NullToVisibilityConverter" /> 
     <converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" /> 
     <x:Double x:Key="EllipseDimension">30</x:Double> 
    </Page.Resources> 

    <Page.BottomAppBar> 
     <CommandBar x:Name="AppBar" 
        IsOpen="{x:Bind CommandBarViewModel.IsCommandBarVisible}" 
        ClosedDisplayMode="Compact" 
        IsSticky="{x:Bind CommandBarViewModel.IsCommandBarVisible}" 
        Visibility="{x:Bind CommandBarViewModel.IsCommandBarVisible, 
Converter={StaticResource BoolToVisibilityConverter}}" 
        Background="{ThemeResource SystemControlBackgroundAccentBrush}" 
        IsEnabled="{x:Bind IsNotBusy}"> 
      <AppBarButton 
       Icon="Add" 
       Label="Add" 
       Foreground="White" 
       Command="{x:Bind CommandBarViewModel.RegisterCommand}" 
       Visibility="{x:Bind CommandBarViewModel.IsRegisterVisible, 
Converter={StaticResource BoolToVisibilityConverter}}"/> 

      <AppBarButton 
       Icon="Refresh" 
       Label="Refresh" 
       Foreground="White" 
       Command="{x:Bind CommandBarViewModel.RefreshListCommand}" 
       Visibility="{x:Bind CommandBarViewModel.IsRefreshListVisible, 
Converter={StaticResource BoolToVisibilityConverter}}"/> 
     </CommandBar> 
    </Page.BottomAppBar> 
</Page> 

Dank.

Antwort

0

Ich erstelle ein Beispielprojekt mit Ihrem Code:

XAML:

<Page 
    x:Class="CommandBarSample.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:CommandBarSample" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" x:Name="root"> 

    </Grid> 

    <Page.BottomAppBar> 

      <CommandBar IsOpen="True" 
       IsSticky="True" 
         ClosedDisplayMode="Compact" 
       Background="{ThemeResource SystemControlBackgroundAccentBrush}"> 

       <AppBarButton 
      Icon="Add" 
      Label="Add" 
      Foreground="White" 
      Command="{Binding CommandBarViewModel.RegisterCardCommand}" 
      /> 

       <AppBarButton 
      Icon="Refresh" 
      Label="Refresh" 
      Foreground="White" 
      Command="{Binding CommandBarViewModel.RefreshCardListCommand}" 
      /> 
      </CommandBar> 

    </Page.BottomAppBar> 
</Page> 

xaml.cs:

Standardvorlage, nichts ändern.

Ich kann nicht reproduzieren Ihre Ausnahme und UI Bug, hier ist meine Vermutung: irgendwo in Ihrem Projekt, Sie erwähnen HighContrastBorder als Ziel für Stil. Ich würde vorschlagen, dass Sie es woanders finden und reparieren, Ihr veröffentlichter Code funktioniert. Mein Build ist 14316 Desktop.

UPDATE

I Visibility="{Binding ShowButton}" zum AppBarButton, fügen this.DataContext = this; zum contructor des xaml.cs

folgend in xaml.cs hinzufügen:

private bool _ShowButton = true; 

     public bool ShowButton 
     { 
      get 
      { 
       return _ShowButton; 
      } 
      set 
      { 
       Set(ref _ShowButton, value); 
      } 
     } 

     private void Set(ref bool _ShowButton, bool value, [CallerMemberName] string property = "") 
     { 
      _ShowButton = value; 
      NotifyPropertyChanged(property); 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     private void NotifyPropertyChanged(String info) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(info)); 
      } 
     } 

Wenn ich ändern ShowButton Wert, wird die Sichtbarkeit entsprechend aktualisiert.

+0

Ich habe die gesamte Lösung für HighContrastBorder durchgesehen und es ist nirgendwo zu finden? Irgendwelche anderen Vorschläge? Ich werde meine Antwort aktualisieren Ich habe etwas anderes gefunden, das seltsam ist. – Thierry

+0

Ich aktualisiere meine Antwort, kann Ihren Fehler immer noch nicht reproduzieren, können Sie mir Ihre Probe schicken? – thang2410199

0

There is no InnerException and the exception is thrown from App.g.i.cs

#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION 
UnhandledException += (sender, e) => 
     { 
      if (global::System.Diagnostics.Debugger.IsAttached) 
      global::System.Diagnostics.Debugger.Break(); 
     }; 
#endif 

ich dieses Problem reproduzieren kann, wenn die Add-Taste oder die Taste Refresh ganz am Anfang auf unsichtbar gesetzt wird, wenn der Code ausgeführt wird. Um dieses Problem zu lösen, können Sie x:Bind anstelle von Binding verwenden. {x: Bind} führt Spezialcode aus, den er zur Kompilierungszeit generiert, und {Binding} verwendet eine allgemeine Laufzeitobjektprüfung.

Wenn Sie „false“ (unsichtbar) an die IsAddVisible oder IsRefreshListVisible auf den ersten gesetzt, es nicht zu erzeugen, um den angepassten AppbarButton, wird der Fehler mit Binding passieren. Zum Beispiel verwenden Sie x:Bind, um unsichtbar für die Refresh Schaltfläche und sichtbar für die Add Schaltfläche, finden Sie dort ist kein Platz für Refresh Schaltfläche in der CommandBar, ersetzt die Add Schaltfläche die es. Dies kann meine Meinung bestätigen, wenn Sie false auf die AppbarButton setzen, wenn die Commandbar initialisiert wird, erzeugt es diese Schaltfläche nicht.

No installed components were detected. Cannot resolve TargetName HighContrastBorder

Wenn Sie das Kontroll template of CommandBar Sie dort sehen, ist ein RectangleHighContrastBorder innerhalb des CommandBar benannt.

Oder können Sie Live-Baumstruktur verwenden diese HighContrastBorder zu finden, wenn Ihr Code ausgeführt wird:

enter image description here

Wie Sie sehen können, ist es ein Rectangle im ContentRoot des CommandBar.

Ich kann weder dieses Problem noch das Text-Cut-Off-Problem reproduzieren, sie funktionieren immer gut von meiner Seite. Ich verwende MVVM, aber ich habe MVVMLight nicht verwendet, um das Problem zu testen. Vielleicht können Sie Ihre Probe teilen.

+0

Hallo Grace, danke für das ausführliche Feedback. Bei der Verwendung von x: bind erhalte ich einen Fehler: Ungültiger Bindungspfad 'CommandBarViewModel.IsCommandBarVisible': Die Eigenschaft 'CommandBarViewModel' kann beim Aufruf von 'AppShell' nicht gefunden werden: IsOpen = "{x: Bind CommandBarViewModel.IsCommandBarVisible} "- Derselbe Fehler gilt für alle AppBarButton, nicht nur für die CommandBar. Ich bin mir nicht sicher, warum es in der AppShell sucht, da dies die Ansicht ist und nicht in meinem ViewModel, also AppShellViewModel Pfad zu AppShellViewModel, aber ich bekomme einen weiteren Fehler: "Pfad mehrfach gesetzt. Irgendwelche Ideen? – Thierry

+0

Hallo Grace, ich habe den XAML-Code hinzugefügt. Hoffentlich hilft das. Danke. – Thierry

+0

@Thierry, Ja, wenn du x verwendest: Bind, versuche, 'CommandBarViewModel.IsCommandBarVisible' in' IsCommandBarVisible' zu ​​ändern, die anderen beiden ebenfalls. –