2012-12-21 20 views
5

Uygulamam için yaklaşık 100 Hubtiles yaptım ve bunların bir XML dosyasını okunduğunda okumasını ve kullanıcının 'başlatmak için pin yapabilmesini' istiyorum. App dışında kendi ekranında istenen Hubtile.Windows Phone 7 iğneyi bir uygulamanın içinden başlatmak için pim

Her Hubtile, farklı bir XML dosyası okur ve başlamak için sabitlenebilmelidir.

Başlamak için onu sabitleyen kodu biliyorum ve XML'yi okumasını sağlayan kodu biliyorum, ancak 100 fayans var ve bu kodlama ve kopyalama/yapıştırma işlemlerinin birçok satırı olacaktır.

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

Ve olun ve zaten var olmadığını kontrol etmek CS dosyasının arkasında kod:

Bu

bir karo benim kod uygulamasından pop ve xaml başlamak sabitlenir muktedir olduğunu:

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

o bir musluk olay işleyici ile gerçekleşmesi ya da ben hubtiles başlamak için pim için tüm 100 karoları için 100 musluk olay işleyiciler ve her XML dosyası için 100 yolları ve 100 olay işleyicileri ihtiyaç yapmak için dinamik bir yolu var mı ve xaml'daki her göbeğe aynı şeyleri yazabilir mi?

Dahası, denedim ve tüm hubtiles için bir musluk olay işleyicisi yapmak için, işe yarıyor ama hubtile ismine, sadece karo adını bütün yolu bakın:

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

cevap

7

Her kontrolün bir Tag özelliği vardır. Bu özellik object tipindedir ve için gönderilmiştir. Temel olarak, içinde ihtiyacınız olan bilgileri koyabilirsiniz. Yapmaya çalıştığınız şey gibi genel eylemleri uygulamak için çok değerli bir yardım.

Böylece gibi bir şey yapabilirsiniz:

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

Ardından olay işleyicisi: çok yardımcı

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

Teşekkür! –