2009-08-20 2 views
2

У меня есть приложение WPF, которое использует x: type при работе с datatemplates. Это не работает в Silverlight из коробки, но я помню, что некоторое время назад я видел что-то в googlegroup, где они говорили о расширениях Silverlight и о том, как это можно использовать.Преобразование WPF Datatemplates с использованием x: Тип для Silverlight

Если кто-то знает, о чем я говорю, или знает, как я могу повторно использовать свои datatemplates в silverlight, и у вас есть хороший образец кода, который вы бы сделали моим днем.

/Johan

ответ

0

в Silverlight, Вы отпустите х: Тип и падение брекеты ... как это ....

<Style TargetType="local:TemplatedControl"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="local:TemplatedControl"> 
        <StackPanel x:Name="Panel" /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
</Style> 
+0

Я использую MMVM, поэтому я динамически загружаю объекты и хочу, чтобы пользовательский интерфейс отображал правильный вид в зависимости от типа. Решение youor все еще решает мою проблему? – 2009-08-21 11:44:51

+0

возьмите свой WPF xaml и замените {x: Тип ....}, удалите фигурные скобки, удалите x: Type, и вам должно быть хорошо идти. silverlight немного отличается, поэтому вам может понадобиться сделать селектор шаблонов или такой. –

1

У меня была та же проблема, пару дней назад ... и я нашел решение ... Я не очень горжусь этим, но это работает .. создать DataTemplate и добавить туда все возможные UserControls

<DataTemplate x:Key="WorkspaceItemTemplate"> 
      <Grid> 
       <View:TreeView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=TreeView}" /> 
       <View:GridView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=GridView}" /> 
       <View:DataView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=DataView}" /> 
      </Grid> 
     </DataTemplate> 

и создать конвертер, что тя видимость НГРЭС на основе типа

public class ViewVisibilityConverter : IValueConverter 
    { 

     #region IValueConverter Members 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (((ViewModelBase)value).DisplayName.Equals((string)parameter)) 
       return Visibility.Visible; 
      return Visibility.Collapsed; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 
    } 
+0

Да, это не очень хорошее решение, так как ваши скрытые элементы управления все еще висят в фоновом режиме и потребляют ресурсы. Я думаю, что лучший способ сделать это - с помощью селектора шаблонов. –

1

Это было окончательно зафиксировано в Silverlight 5. Вы можете написать такие вещи сейчас:

<DataTemplate DataType="loc:MyType"> 
    <TextBlock Text="My template" /> 
</DataTemplate> 

Вы можете положить, что в словаре ресурсов без необходимости указывать х : Ключ.

Обратите внимание, что Silverlight не поддерживает атрибут x: Type, поэтому вам нужно указать только имя типа без расширения разметки, как упоминает Muad'Dib (хотя его предложение на самом деле не работает, когда он написал его еще в 2009 году - DataTemplate от Silverlight даже не обладал свойством DataType до декабря 2011 года).

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