2012-12-21 5 views
5

Ich habe rund 100 Hubtiles für meine Anwendung erstellt, und ich möchte, dass sie eine XML-Datei lesen, wenn sie angetippt werden, und der Benutzer in der Lage sein soll, "anzustoßen" gewünschter Hubtile auf seinem Bildschirm außerhalb der App.Windows Phone 7 Pin zum Starten von Kacheln aus einer Anwendung heraus

Jeder Hubtile liest eine andere XML-Datei und muss zum Starten gepinnt werden können.

Ich kenne den Code, um es zu starten, und ich kenne den Code, damit es das XML lesen, aber es gibt 100 Kacheln und das wäre viele Zeilen von Codierung und Kopieren/Einfügen.

Dies ist mein Code für eine Kachel aus der Anwendung Pop zu können und fixiert wird auf XAML zu starten:

<toolkit:HubTile Name="Monday" Title="Monday" Source="Days\Weekdays\Monday.png" Margin="15" Tap="day_Tap"> 
    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu> 
      <toolkit:MenuItem Name="monday" Header="pin to start" Tap="monday_Tap"/> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
</toolkit:HubTile> 

Und den Code hinter der CS-Datei zu machen und zu prüfen, ob es bereits vorhanden ist:

private void monday_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    CreateLiveTile(Monday, "path-to-xml", "monday_Square_0.png"); 
} 

private void CreateLiveTile(HubTile hubtile, string link, string id) 
{ 
    StandardTileData LiveTile = new StandardTileData 
    { 
     Title = hubtile.Title, 
     BackBackgroundImage = (hubtile.Source as BitmapImage).UriSource 
    }; 
    ShellTile Tile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("id=" + id)); 
    { 
     if (Tile == null) 
     { 
      ShellTile.Create(new Uri("/Show.xaml?id=" + id + "&link=" + link, UriKind.Relative), LiveTile); 
     } 
     else 
     { 
      MessageBox.Show("The tile is already pinned"); 
     } 
    } 
} 

gibt es eine dynamische Art und Weise für sie mit einem einzigen Tastendruck-Ereignishandler geschehen oder muss ich 100 tap Event-Handler für alle 100 Kacheln und 100 Pfade für jede XML-Datei und 100 Event-Handler für den Stift hubtiles zu starten und die gleichen Dinge auf jedem Hubtil auf XAML zu schreiben?

Außerdem habe ich versucht, und denke, es funktioniert, eine Tap-Ereignishandler für alle hubtiles zu machen, aber ich sehe den gesamten Pfad zu dem Namen des hubtile, nicht nur den Ziegel Namen:

private void Week_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    String a = (((Microsoft.Phone.Controls.HubTile)(sender)).Source as BitmapImage).UriSource.OriginalString; 
    String b = a.Replace(((Microsoft.Phone.Controls.HubTile)(sender)).Title + "_Square_0.png", "week.xml"); 
    String weekPath = a.Replace(((Microsoft.Phone.Controls.HubTile)(sender)).Title + "_Square_0.png", ""); 
    String weekName = ((Microsoft.Phone.Controls.HubTile)(sender)).Title;  
    NavigationService.Navigate(new Uri("/Show.xaml?parameter=" + b, UriKind.Relative)); 
} 

Antwort

7

Jede Kontrolle hat eine Tag Eigenschaft. Diese Eigenschaft ist vom Typ object und wurde für Sie. Grundsätzlich können Sie alle Informationen, die Sie benötigen, hineinlegen. Es ist eine unschätzbare Hilfe bei der Implementierung von generischen Aktionen, wie Sie es gerade tun.

So können Sie so etwas wie:

<toolkit:HubTile Name="Monday" Title="Monday" Source="Days\Weekdays\Monday.png" Margin="15" Tap="Tile_Tap" Tag="path-to-xml"> 

Dann im Ereignishandler:

private void Tile_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    var pathToXml = (string)((FrameworkElement)sender).Tag; 
    // Whatever 
} 
+0

Dank, das hat mir sehr geholfen! –