Изменение Silverlight разрабатывает на основе значения свойства объектов (т.е. DataTrigger)

Это не вызов Ajax, это замораживает браузер. Это - обработчик успехов (applyTemplate). Вставка HTML в документ как этот может заморозить IE, в зависимости от сколько HTML, там. Это - потому что IE, UI является единственным, распараллелил; если Вы замечаете, фактические меню IE замораживаются также, в то время как это происходит.

Как тест, попробуйте:

applyTemplate = function(msg) {
   return;
}
12
задан 27 September 2009 в 17:29
поделиться

1 ответ

Silverlight не содержит DataTemplateSelector , который используется для выбора шаблона данных на основе элемента с привязкой к данным и объекта данных. Но построить свой собственный несложно.

Начните с класса, который наследуется от System.Windows.Controls.ContentControl . Этот класс имеет свойство для шаблона данных и свойство для содержимого, которое вы можете использовать для привязки. Создайте переопределение для метода OnContentChanged , подобного этому

protected override void OnContentChanged(object oldContent, object newContent) 
{
}

. Я предпочитаю помещать шаблоны в отдельный словарь, на всякий случай, если мне нужно разделить их между проектами. В этом методе установите шаблон этого элемента управления на шаблон, выбранный из словаря. Что-то вроде:

Switch(DataStatus){
  case 0: ContentTemplate = LoadFromDictionary(
                                "DataTemplateDemo;component/DataTemplates.xaml",
                                "Status0Template");
          break;
  case 1: ContentTemplate = LoadFromDictionary(
                                "DataTemplateDemo;component/DataTemplates.xaml", 
                                "Status1Template");
          break;
   //etc      
}

в этом случае должно быть имя словаря DataTemplates.xaml с парой шаблонов данных.

В вашем xaml-файле используйте класс селектора шаблона в качестве шаблона списка:

 <ListBox x:Name="AnInterrestingList">
    <ListBox.ItemTemplate>
    <DataTemplate>
        <DataTemplateDemo:DateTemplateSelector Content="{Binding}"/>
    </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Я использую этот вспомогательный метод, как показано ниже, для извлечения шаблонов из словарей:

public static DataTemplate LoadFromDictionary(string dictionary,
                                              string template)
{
    var doc = XDocument.Load(dictionary);
    var dict = (ResourceDictionary)XamlReader
                     .Load(doc.ToString(SaveOptions.None));
    return dict[template] as DataTemplate;
}

Обновление

Тем временем я написал сообщение в блоге с образцом кода на эту тему. Он доступен в моем блоге .

10
ответ дан 2 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: