2012-12-21 6 views
5

Tôi đã tạo khoảng 100 Hubtiles cho ứng dụng của mình và tôi muốn họ đọc tệp XML khi chúng được khai thác và người dùng có thể 'ghim để bắt đầu' mong muốn Hubtile trên màn hình của mình bên ngoài ứng dụng.Windows Phone 7 pin để bắt đầu gạch từ bên trong một ứng dụng

Mỗi Hubtile đọc một tệp XML khác nhau và phải có khả năng được ghim để bắt đầu.

Tôi biết mã để ghim nó để bắt đầu, và tôi biết mã để làm cho nó đọc XML, nhưng có 100 gạch và đó sẽ là nhiều dòng mã hóa và sao chép/dán.

Đây là mã của tôi cho một gạch để có thể bật từ các ứng dụng và được gắn để bắt đầu trên 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> 

Và mã đằng sau những tập tin CS để thực hiện và kiểm tra xem nó đã tồn tại:

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

có cách năng động cho nó xảy ra với xử lý sự kiện một vòi nước hay tôi cần 100 xử lý sự kiện tap cho tất cả 100 gạch và 100 đường dẫn cho mỗi tập tin XML và 100 xử lý sự kiện cho pin để bắt đầu hubtiles và viết những thứ tương tự trên mọi hubtile trên xaml?

Bên cạnh đó, tôi đã cố gắng, và nghĩ rằng nó đang làm việc, để làm cho xử lý sự kiện một vòi nước cho tất cả các hubtiles nhưng tôi thấy toàn bộ đường dẫn đến tên của hubtile, không chỉ tên ngói:

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

Trả lời

7

Mọi điều khiển đều có thuộc tính Tag. Bất động sản này thuộc loại object và đã được đặt ở đó cho bạn. Về cơ bản, bạn có thể đặt bất kỳ thông tin nào bạn cần bên trong. Đó là một sự trợ giúp vô giá để thực hiện các hành động chung, giống như những gì bạn đang cố gắng làm.

Vì vậy, bạn có thể làm điều gì đó như:

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

Sau đó, trong xử lý sự kiện:

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

Cảm ơn đã giúp rất nhiều! –