Использование атрибута Ambient в .NET? - PullRequest
2 голосов
/ 11 июля 2011

Может кто-нибудь пролить свет на Ambient Attribute в .NET?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2017

Используется для решения проблемы как
<Setter Property="P" Value="V" />
Вы должны знать P (на самом деле тип P), прежде чем сможете понять, как преобразовать V в значение правильного типа. Вы помечаете свойство «Свойство» с помощью [Ambient] и 1. загрузчик сначала обработает «Свойство» и 2. позволяет преобразователю типа «Значение» считывать значение «Тип» при запуске.
Так же {StaticResource foo} просматривает родителей XAML в поисках ResourceDictionary, в которых может быть "foo".

Например:

// This markup extension returns the number of Ambient "Resource" properties
// Found in the XAML tree above it.
// The FrameworkElement.Resources property is already marked [Ambient]
public class MyMarkupExtension : MarkupExtension
{
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        var schemaProvider = serviceProvider.GetService(typeof(IXamlSchemaContextProvider)) as IXamlSchemaContextProvider;
        var ambientProvider = serviceProvider.GetService(typeof(IAmbientProvider)) as IAmbientProvider;
        XamlMember resourcesProperty = new XamlMember(typeof(FrameworkElement).GetProperty("Resources"), schemaProvider.SchemaContext);
        List<AmbientPropertyValue> resources = (List<AmbientPropertyValue>) ambientProvider.GetAllAmbientValues(null, resourcesProperty);
        Debug.WriteLine("found {0} FramewrkElement.Resources Properties", resources.Count);
        return resources.Count.ToString();
    }
}
1 голос
/ 11 июля 2011

Я думаю, что ссылка MSDN хороша для объяснения этого.

Также смотрите эту строку на приведенной выше странице

"Типы окружения (типы, в которых применяется AmbientAttribute вуровень типа) может использоваться для определенных ситуаций обработки XAML, когда тип свойства должен быть разрешен не по порядку. "

И эта ссылка говорит

" AmbientAttributeвстречается в элементах нескольких типов WPF, включая Application, Setter и Style, а также в типе ResourceDictionary, который указывает на то, что любой член, использующий ResourceDictionary в качестве его типа, должен рассматриваться как окружающий, даже если этот член специально не приписан. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...