№123 – Coercing a Dependency Property

Класс который реализует зависимое свойство (dependency property), может также предоставлять метод обратного вызова для coercion, которое указывается при регистрации свойства. Coercion callback вызывается перед получением свойством нового значения и дает классу возможность принудительно изменить значение свойства на другое значение.

Вы укажите метод обратного вызова валидации при регистрации зависимого свойства, используя делегат CoerceValueCallback.

Читать полностью »

12.11.2010

№122 – Валидация Dependency Property

Класс, который реализует зависимые свойства (dependency property), может также предоставлять обратные вызовы для валидации (validation callback), которые указываются при регистрации свойства. Обратные вызовы валидации вызываются, когда свойство устанавливается в новое значение и возвращает true или false, указывая валидно ли новое значение.

Вы указываете обратный вызов валидации при регистрации зависимого свойства.

Читать полностью »

11.11.2010

#117 – Регистрация Dependency Property

Для реализации dependency property, класс должен создать одиночный статический экземпляра класса DependencyProperty. Этот экземпляр статический потому, что DependencyProperty только описывает dependency property, а не является местом для хранения фактического значения свойства.

Начните с определения статического поля для нового свойства.

Читать полностью »

06.11.2010

#115 – Скачивание всего исходного кода .NET 4

В статье №90 показано, как пошагово отлаживать исходный код .NET 4 из Visual Studio 2010. Если вы хотите просто посмотреть исходный код без пошаговой отладки в отладчике, то вы можете скачать его весь себе.

Зайдите на сайт: http://referencesource.microsoft.com/netframework.aspx.

Вы увидите список всех компонентов с исходным кодом, которые можно скачать. Посмотрите ближе к концу списка на .NET 4.

Читать полностью »

04.11.2010

Полезные ссылки (25.10.2010)

.NET

  1. The Truth About Value Types — The way in the past I've usually pushed back on this myth is to say that the real statement should be "in the Microsoft implementation of C# on the desktop CLR, value types are stored on the stack when the value is a local variable or temporary that is not a closed-over local variable of a lambda or anonymous method, and the method body is not an iterator block, and the jitter chooses to not enregister the value."
  2. Converting a concatenated String into String.Format — The macro’s purpose is simple - turn a string that you are concatenating into a String.Format statement. This generally produces much more readable code and becomes more maintainable long term. It even attempts to recognize when you are already using a formatted ToString...
  3. Enumerating Through XML Elements Using LINQ-to-XML — 4Guys reader Dan D. recently emailed me with an inquiry surrounding my article series, Building a Store Locator ASP.NET Application Using Google Maps API, specifically on how to access a different set of XML elements within the XML data returned from the Google Maps API’s geocoding service. Google’s geocoding service is offered as a URL that, when requested, returns information about a particular address. For instance, if you point your browser to http://maps.google.com/maps/api/geocode/xml?address=1600+Pennsylvania+Ave,+Washington+D.C.&sensor=false you should see an XML response that indicates whether the address is valid, the formatted address, the components that make up the address, and geographical information about the address, including the latitude and longitude coordinates...
  4. Redlining C#'s Dynamic Features — Before I go any further: the point of this post isn't to convince you of anything (where have I read that before?) - it's to explore a new language feature completely and, hopefully, have a good discussion on it. If you are feeling a bit of a gag reflex - I think It's important to know why. What is it that is causing you to dislike what you're about to see? C# is going more and more dynamic - time and feature set have proven that. Maybe it's time to bend your thinking? Or maybe it's not...
  5. Links to Scott Guthrie's Using LINQ to SQL Tutorials — Back when Visual Studio 2008 came out, Scott Guthrie wrote an excellent series of blog posts on using LINQ to SQL. Unfortunately, the various installments are not easy to follow when starting from Part 1 and going onward, so I've decided to gather and organize the links here for myself and for anyone else interested in his tutorial...
  6. NuPack brings package management to Microsoft .NET — Microsoft has announced the beta release of NuPack, which is a package manager for .NET projects, mainly focused on open source libraries. NuPack itself is open source.
    I downloaded NuPack and took a look. It installs as a Visual Studio extension, and I used it with Visual Studio 2010. Once installed, you get a new Add Package Reference option for any .NET project, which opens this dialog...
  7. Some Best Practices for C# Application Development (Explained) — Few days ago, in one my earlier post, I listed “Some Best Practices for C# Application Development” from my past few years experience, which got a huge hit by my readers. I got several feedbacks on that too. Many of my readers gave valued suggestions too...

Читать полностью »

25.10.2010

#90 – Пошаговая отладка с подключением исходного кода .NET в Visual Studio 2010

Иногда бывает полезно посмотреть не только метаданные классов .NET и WPF, но также пройтись в пошаговой отладке по исходному коду и посмотреть, как оно работает.

Для включения пошаговой отладки по исходному коду .NET в отладчике:

Для начала закройте все открытые солюшены. Далее в Tools | Options, выберите Debugging | General и отметьте пункт Enable .NET Framework source stepping.

Читать полностью »

10.10.2010

#80 – Content Properties и Collection Syntax Express UIElement Containment

Использование content property и the collection syntax довольно часто используются в XAML и часто для выражения содержания коллекции объектов UIElement в родительском контейнере.

Например, StackPanel это родительский контрол для содержания некоторого числа дочерних контролов:

Читать полностью »

30.09.2010

#33 – Класс Control

Класс Control наследует от FrameworkElement и является базовым классом для всех элементов управления, с которыми пользователь взаимодействует. Примеры элементов управления включают: TextBox, Label, ListBox, ComboBox и Button. Контейнер элементов, таких как Panel и Grid не являются элементами управления.

Класс Control расширяет FrameworkElement путем добавления функциональности:

  • Изменение внешнего вида элемента управления с помощью шаблонов
  • Поддержка визуальных элементов, таких как шрифты, границы и цвет фона

Оригинал: #33 – Control Class

14.08.2010

#32 – Класс FrameworkElement

FrameworkElement класс наследуется от UIElement и, в свою очередь родительский класс для всех элементов управления в WPF.

FrameworkElement основывается на UIElement и добавляет следующую функциональность:

  • Layout – реализует макет модели путем реализации свойства, таких как HorizontalAlignment, MinWidth и Margin
  • Поддержка анимации с помощью метода BeginStoryboard
  • Привязка данных
  • Шаблоны данных для привязки данных
  • Стили

FrameworkElement является также основным базовым классом для объектов, которые будут добавлены к логическому дереву (иерархия визуальных объектов, которые составляют пользовательский интерфейс).

Оригинал: #32 – FrameworkElement

13.08.2010

#31 – Класс UIElement

UIElement класс наследует от класса Visual и добавляет поддержку для основного поведения взаимодействия с пользователем, в том числе:

  • Layout behavior
    • Родительские/дочерние отношения
    • Measure/Arrange passes
  • Взаимодействие с пользовательским вводом
    • Входные события из устройств, таких как клавиатура/мышь
    • Команда привязок
  • Управление фокусом
  • Возбуждение (и ответ на) маршрутизируемых событий
    • Продвижение события по дереву элемента

Обратите внимание, что аббревиатура образована, чтобы помочь в понятии UIElement - "Жизнь начинается в UIElement".

Оригинал: #31 – UIElement Class

12.08.2010