2010-11-20 8 views
13

Ich habe eine Windows Phone 7-Anwendung in Silverlight erstellt. Diese Anwendung verwendet die Anwendungsleiste. Wenn die Anwendung gekauft wurde, möchte ich eine der Schaltflächen in der Anwendungsleiste ausblenden. Ich habe jedoch bemerkt, dass die ApplicationIconButton-Klasse keine "Visibility" -Eigenschaft verfügbar macht. Zur gleichen Zeit sah ich keine Möglichkeit, die Anwendungsleiste zur Laufzeit dynamisch zu füllen.Programmleistenleiste programmgesteuert in einer WP7 Silverlight-Anwendung ausblenden?

Kann mir jemand einen Einblick geben? Ist das möglich? Wenn das so ist, wie?

Danke!

Antwort

32

Die Schaltflächen der Anwendungsleiste funktionieren eher indexbasiert als objektbasiert, wie Sie es erwarten würden. Daher müssen Sie einen Schaltflächenindex angeben, wenn Sie eine bestimmte Aktion ausführen möchten (z. B. deaktivieren).

Zum Beispiel:

ApplicationBarIconButton b = (ApplicationBarIconButton)ApplicationBar.Buttons[0]; 
b.IsEnabled = false; 

Nachdem dies gesagt ist, können Sie neue ApplicationBarIconButton Instanzen erstellen und sie zu ApplicationBar passieren:

for (int i = 0; i < 2; i++) 
{ 
    ApplicationBarIconButton b = new ApplicationBarIconButton(); 
    b.Text = i.ToString(); 
    b.IconUri = new Uri("/Images/icon1.png", UriKind.Relative); 
    ApplicationBar.Buttons.Add(b); 
} 

Wenn Tasten zu entfernen, können Sie einfach RemoveAt verwenden, da Sie kenne den Index der zu entfernenden Schaltfläche:

ApplicationBar.Buttons.RemoveAt(0); 
13

Ich verwende die folgende Methode die Anwendungsleiste Tasten in meinem Code zu ändern:

private void UpdateAppbarButton(int index, string uriString, string text, bool visibility, EventHandler handler) 
{ 
    ApplicationBarIconButton button1 = null; 

    if (ApplicationBar.Buttons.Count > index) 
    { 
     button1 = ApplicationBar.Buttons[index] as ApplicationBarIconButton; 
    } 

    if (button1 != null) 
    { 
     { 
      ApplicationBar.Buttons.Remove(button1); 
     } 
    } 
    if (visibility == true) 
    { 
     button1 = new ApplicationBarIconButton(new Uri(uriString, UriKind.Relative)); 
     button1.Text = text; 
     button1.Click += handler; 
     ApplicationBar.Buttons.Insert(index, button1); 
    } 
} 

Der uriString ist der relative Pfad zu dem Symbol, das ich auf der App-Taste angezeigt werden soll. Sie können diesen Code wahrscheinlich für Ihre eigenen Szenarien anpassen.

Im Wesentlichen, anstatt eine Schaltfläche sichtbar zu setzen oder nicht, müssen Sie die Schaltfläche entfernen (wenn es da ist) oder neu hinzufügen, wenn es nicht ist.

+0

Ich muss die IconUri für Appl geben icingBarIconButton als http URL. Ist das möglich? Ich bekomme die folgende Ausnahme. "Pfad kann nicht absolut sein". – Sujiz

+0

Hallo Sujiz, hast du den UriKind Parameter auf absolut gesetzt? Obwohl ich nicht weiß, ob HTTP-Adressen funktionieren oder nicht, ist es einen Versuch wert. –

+0

Ich habe den UriKind auf absolut eingestellt, aber es hat nicht für mich funktioniert. Gibt es eine andere Lösung, um das Anwendungsleisten-Symbol von http URL laden? – Sujiz

Verwandte Themen