Я пытаюсь понять метод определения значения свойства зависимости.
когда я смотрю в метод GetValue DependencyObject, я вижу, что он вызывает
return GetValueEntry(
LookupEntry(dp.GlobalIndex),
dp,
null,
RequestFlags.FullyResolved).Value;
Пожалуйста, обратитесь к https://referencesource.microsoft.com/#windowsbase/Base/System/Windows/DependencyObject.cs,f4481c3e6cb032a5
Внутри метода GetValueEntry я обнаружил следующий блок кода -
if (entryIndex.Found)
{
if ((requests & RequestFlags.RawEntry) != 0)
{
entry = _effectiveValues[entryIndex.Index];
}
else
{
entry = GetEffectiveValue(
entryIndex,
dp,
requests);
}
}
Пожалуйста, обратитесь к
https://referencesource.microsoft.com/#windowsbase/Base/System/Windows/DependencyObject.cs,f4481c3e6cb032a5
Насколько я понимаю, этот блок кода выполняется, когда соответствующий DependencyObject имеет запись для свойства Dependency в массиве EffectiveValues, тогда этот блок кода выполняется.
Теперь следующее определение
internal enum RequestFlags
{
FullyResolved = 0x00,
AnimationBaseValue = 0x01,
CoercionBaseValue = 0x02,
DeferredReferences = 0x04,
SkipDefault = 0x08,
RawEntry = 0x10,
}
поэтому (запросы & RequestFlags.RawEntry) всегда будет 0, так как мы передаем RequestFlags.FullyResolved from GetValue. Так что это значит, всегда GetEffectiveValue
позвонить.
Я что-то упустил? когда мы получим значение из _effectiveValues [entryIndex.Index]?
Кроме того, я вижу следующую строку кода
else if (!dp.IsDefaultValueChanged)
{
return EffectiveValueEntry.CreateDefaultValueEntry(dp, dp.DefaultMetadata.DefaultValue);
}
Как мы можем изменить значение по умолчанию для существующего свойства зависимости?
И почему это проверяется в операции Get?