2013-03-01 4 views
0

Мне нужно показать содержимое в приложении для Windows Phone. Это текст, изображения, аудио, видео и т. Д. Каждый Item имеет имя автора и изображение, а также содержимое List<> (разное количество). И мне нужно это показать. Сейчас у меня есть одно решение - используйте TemplateSelector с Lisbox или LLS. Но комбинации контента составляют> 30 и 30 temlates - это около 2000 строк кода, и я думаю, что это плохое решение. Я попытался сделать универсальный контроль, который включает в себя все контейнеры (элементы управления) для контента, и я заполнил его только тем содержимым, которое находится в Item (пустые контейнеры просто сведены к минимуму), но производительность действительно плохая (каждый имеет 10-11 элементов управления) , Решение с одним контролем хорошо, но мне нужно хорошее исполнение. Есть ли способ решить этот вопрос?Какой контроль следует использовать для показа другого контента?

ответ

0

У меня была такая же проблема, чтобы отображать различные кнопки в Windows Phone. Я сделал UserControl и установить определенный шаблон в код-за:

public partial class Map : UserControl 
{ 
    public Map() 
    { 
     InitializeComponent(); 
     this.Loaded += Map_Loaded; 
    } 

    void Map_Loaded(object sender, RoutedEventArgs e) 
    { 
     (this.DataContext as MyViewModel).LoadingItemsCompleted += OnLoadingItemsCompleted; 
    } 

    private void OnLoadingItemsCompleted(object sender, EventArgs eventArgs) 
    { 
     // Don't care about thats 
     ObservableCollection<DependencyObject> children = Microsoft.Phone.Maps.Toolkit.MapExtensions.GetChildren(map); 
     MapItemsControl itemsControl = children.FirstOrDefault(x => x.GetType() == typeof(MapItemsControl)) as MapItemsControl; 

     // Here ! 
     foreach (GeolocalizableModel item in (this.DataContext as MyViewModel).Items) 
     { 
      Pushpin pushpin = new Pushpin(); 
      switch (item.PushpinTemplate) 
      { 
       case Server.PushpinTemplate.First: 
        pushpin.Template = this.Resources["firstPushpinTemplate"] as ControlTemplate; 
        break; 
       case Server.PushpinTemplate.Second: 
        pushpin.Template = this.Resources["secondPushpinTemplate"] as ControlTemplate; 
        break; 
       case Server.PushpinTemplate.Third: 
        pushpin.Template = this.Resources["thirdPushpinTemplate"] as ControlTemplate; 
        break; 
       default: 
        if (PushpinTemplate != null) pushpin.Template = PushpinTemplate; 
        break; 
      } 

      pushpin.Content = item.PushpinContent; 
      pushpin.GeoCoordinate = item.Location; 
      itemsControl.Items.Add(pushpin); 
     } 
    } 

    public ControlTemplate PushpinTemplate 
    { 
     get { return (ControlTemplate)GetValue(PushpinTemplateProperty); } 
     set { SetValue(PushpinTemplateProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for PushpinTemplate. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty PushpinTemplateProperty = 
     DependencyProperty.Register("PushpinTemplate", typeof(ControlTemplate), typeof(Map), new PropertyMetadata(null)); 
} 

Шаблоны определены в UserControl.

Смежные вопросы