5

私は自分のアプリケーション用に約 100 個の Hubtile を作成しました。それらがタップされたときに XML ファイルを読み取り、ユーザーがアプリ外の画面で目的の Hubtile を「ピン留めして開始」できるようにしたいと考えています。

すべての 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 つのタップ イベント ハンドラーで動的に発生する方法はありますか、それとも 100 個のタイルすべてに 100 個のタップ イベント ハンドラー、各 XML ファイルに 100 個のパス、ピンがハブタイルを開始して同じことを書き込むために 100 個のイベント ハンドラーが必要ですか? xamlのすべてのハブタイル?

さらに、すべてのハブタイルに対して 1 つのタップ イベント ハンドラーを作成しようとしましたが、機能していると思いますが、タイル名だけでなく、ハブタイルの名前へのパス全体が表示されます。

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

1 に答える 1

7

すべてのコントロールには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
}
于 2012-12-21T17:54:54.073 に答える