Nano Hash - криптовалюты, майнинг, программирование

Расширения разметки в WPF/Silverlight

Кто-нибудь когда-нибудь создавал собственное расширение разметки в WPF или Silverlight? Когда бы вы хотели или нуждались в этом? Любые советы или источники о том, как это сделать?


  • Вы говорите о WPF или Silverlight, это чертовски сильно отличается, особенно в этом аспекте... 11.05.2011

Ответы:


1

Примером может служить Локализация:

Простой и эффективный способ локализации ресурсов приложения — написать пользовательское расширение MarkupExtension, которое предоставляет локализованное значение. Расширение принимает параметр, который является уникальным ключом ресурса... [а затем] ищет значение у универсального поставщика ресурсов.

Примечание. В Silverlight нельзя создавать собственные расширения разметки.

04.03.2009
  • Ах, еще в нем много ограничений. Я не могу дождаться Микса, чтобы понять, исправили ли они это дерьмо. 10.03.2009

  • 2

    Да, это удобно, и я создал его сам. Я создал расширение разметки под названием EvalBinding, которое принимает набор привязок в качестве дочерних элементов и строку оценки C#. Он оценивает C# для обработки значений дочерних привязок, поэтому мне не нужно создавать множество простых классов TypeConverter.

    Например, я могу сделать это...

    <EvalBinding Eval="(this[0] > this[1] ? 'GT' : 'LTE')">
        <Binding ElementName="element1" Path="Size"/>
        <Binding ElementName="element2" Path="Size"/>
    <EvalBinding>
    

    Где this — ссылка на массив результатов дочерней привязки.

    Ресурсы по реализации MarkupExtension...

    MSDN

    Запись в блоге Джоша Смита

    Запись в блоге Роба Рельеа

    04.03.2009

    3

    Ура!!

    Это реализовано в Silverlight 5!!

    Более того, теперь это общий интерфейс вместо класса!!

    Проверьте< /а>.

    Прочитайте это для примера.

    10.05.2011
  • К сожалению, ссылки мертвы, и я не могу понять, что означает этот ответ без них. 05.07.2018

  • 4

    Я использую расширение разметки для стандартизации привязок проверки. Так что тут польза небольшая, 4 значения по умолчанию мне больше не нужно ставить, и если я захочу изменить их в будущем, то сделаю это только здесь.

    using System;
    using System.Windows.Data;
    using System.Windows.Markup;
    
    namespace ITIS 
    {
        /// <summary>
        /// Creates a normal Binding but defaults NotifyOnValidationError to True,
        /// ValidatesOnExceptions to True, Mode to TwoWay and 
        /// UpdateSourceTrigger to LostFocus.
        /// </summary>
        public sealed class ValidatedBinding : MarkupExtension
        {
            public ValidatedBinding(string path)
            {
                Mode = BindingMode.TwoWay;
    
                UpdateSourceTrigger = UpdateSourceTrigger.LostFocus;
    
                Path = path;
            }
    
            public override object ProvideValue(IServiceProvider serviceProvider)
            {
                return new Binding(Path) {
                    Converter = this.Converter,
                    ConverterParameter = this.ConverterParameter,
                    ElementName = this.ElementName,
                    FallbackValue = this.FallbackValue,
                    Mode = this.Mode,
                    NotifyOnValidationError = true,
                    StringFormat = this.StringFormat,
                    ValidatesOnExceptions = true,
                    UpdateSourceTrigger = this.UpdateSourceTrigger
                };
            }
    
            public IValueConverter Converter { get; set; }
    
            public object ConverterParameter { get; set; }
    
            public string ElementName { get; set; }
    
            public object FallbackValue { get; set; }
    
            public BindingMode Mode { get; set; }
    
            public string Path { get; set; }
    
            public string StringFormat { get; set; }
    
            public UpdateSourceTrigger UpdateSourceTrigger { get; set; }
        }
    }
    
    18.03.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..