2012-12-21 5 views
5

アプリケーション用に約100個のHubtilesを作成しました。タップされたときにXMLファイルを読み込み、ユーザーが「開始する」ことができるようにしますアプリの外の画面に希望のHubtileアプリケーション内からタイルを開始するためのWindows Phone 7のピン

すべてのHubtileは異なるXMLファイルを読み込み、開始するように固定できる必要があります。

私はそれを開始するためにコードを知っています。私はそれがXMLを読むようにするコードを知っていますが、100個のタイルがあり、それは多くの行のコーディングとコピー/貼り付けになります。

これは、アプリケーションからポップするとXAMLに開始するように固定することができるようにするタイルのための私のコードです:

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

そして、それがすでに存在する場合は作成し、チェックするためのCSファイルの背後にあるコード:

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

それは1つのタップイベントハンドラで発生するか、私はhubtilesを開始するために、すべての100枚のタイル100件のタップのイベントハンドラと、各XMLファイルのための100本のパスとピンのための100のイベントハンドラを必要としないための動的な方法はありますxamlのすべてのハブタイルに同じことを書いていますか?

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

答えて

7

はさらに、私は、タイルの名前だけでなく、試みたが、それが働いていると思いますが、すべてのhubtilesのための1つのタップイベントハンドラを作成するが、私はhubtileの名前にパス全体を見ます

すべてのコントロールにはTagというプロパティがあります。このプロパティはタイプobjectで、の場合はとなります。基本的には、必要な情報を内部に入れることができます。これは、実行しようとしているような一般的なアクションを実装するための貴重な助けとなります。

は、だから、のような何かを行うことができます:

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

を次にイベントハンドラで:たくさん助け

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

感謝を! –

関連する問題