2011-07-11 43 views

回答

1

我認爲MSDN link擅長解釋這一點。

另請參閱這條線在上述頁

「環境類型(其中AmbientAttribute在類型級別上應用的類型)可用於在需要解決掉的順序的屬性的類型某些XAML處理情況「。

link

「AmbientAttribute在幾個WPF類型,其中包括應用程序,二傳手和樣式的成員發現,也是對ResourceDictionary的類型,它蘊含發現,使用ResourceDictionary中的任何成員即使該成員沒有具體歸屬,其類型也應視爲環境。「

1

它是用來解決問題就像
<Setter Property="P" Value="V" />
你必須知道P(實際上P的類型),才能瞭解如何typeconvert V輸入正確類型的值。 您用[Ambient]和1.標記「Property」屬性,加載器將首先處理「Property」,並允許「Value」類型轉換器在運行時讀取「Type」值。
這也是{StaticResource foo}通過XAML父母尋找可能具有「富」的ResourceDictionary的。

例如:

// 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(); 
    } 
}