| File: System\Windows\Localization.cs | Web Access |
| Project: src\wpf\src\Microsoft.DotNet.Wpf\src\PresentationFramework\PresentationFramework.csproj (PresentationFramework) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // // // // Description: Localization.Comments & Localization.Attributes attached properties // // using System.Runtime.CompilerServices; // ConditionalWeakTable using MS.Internal.Globalization; namespace System.Windows { // // Note: the class name and property name must be kept in sync'ed with // Framework\MS\Internal\Globalization\LocalizationComments.cs file. // Compiler checks for them by literal string comparisons. // /// <summary> /// Class defines attached properties for Comments and Localizability /// </summary> public static class Localization { /// <summary> /// DependencyProperty for Comments property. /// </summary> public static readonly DependencyProperty CommentsProperty = DependencyProperty.RegisterAttached( "Comments", typeof(string), typeof(Localization) ); /// <summary> /// DependencyProperty for Localizability property. /// </summary> public static readonly DependencyProperty AttributesProperty = DependencyProperty.RegisterAttached( "Attributes", typeof(string), typeof(Localization) ); /// <summary> /// Reads the attached property Comments from given element. /// </summary> /// <param name="element">The element from which to read the attached property.</param> /// <returns>The property's value.</returns> [AttachedPropertyBrowsableForType(typeof(object))] public static string GetComments(object element) { ArgumentNullException.ThrowIfNull(element); return GetValue(element, CommentsProperty); } /// <summary> /// Writes the attached property Comments to the given element. /// </summary> /// <param name="element">The element to which to write the attached property.</param> /// <param name="comments">The property value to set</param> public static void SetComments(object element, string comments) { ArgumentNullException.ThrowIfNull(element); LocComments.ParsePropertyComments(comments); SetValue(element, CommentsProperty, comments); } /// <summary> /// Reads the attached property Localizability from given element. /// </summary> /// <param name="element">The element from which to read the attached property.</param> /// <returns>The property's value.</returns> [AttachedPropertyBrowsableForType(typeof(object))] public static string GetAttributes(object element) { ArgumentNullException.ThrowIfNull(element); return GetValue(element, AttributesProperty); } /// <summary> /// Writes the attached property Localizability to the given element. /// </summary> /// <param name="element">The element to which to write the attached property.</param> /// <param name="attributes">The property value to set</param> public static void SetAttributes(object element, string attributes) { ArgumentNullException.ThrowIfNull(element); LocComments.ParsePropertyLocalizabilityAttributes(attributes); SetValue(element, AttributesProperty, attributes); } private static string GetValue(object element, DependencyProperty property) { DependencyObject dependencyObject = element as DependencyObject; if (dependencyObject != null) { // For DO, get the value from the property system return (string) dependencyObject.GetValue(property); } // For objects, get the value from our own hashtable string result; if (property == CommentsProperty) { _commentsOnObjects.TryGetValue(element, out result); } else { Debug.Assert(property == AttributesProperty); _attributesOnObjects.TryGetValue(element, out result); } return result; } private static void SetValue(object element, DependencyProperty property, string value) { DependencyObject dependencyObject = element as DependencyObject; if (dependencyObject != null) { // For DO, store the value in the property system dependencyObject.SetValue(property, value); return; } // For other objects, store the value in our own hashtable if (property == CommentsProperty) { _commentsOnObjects.Remove(element); _commentsOnObjects.Add(element, value); } else { _attributesOnObjects.Remove(element); _attributesOnObjects.Add(element, value); } } /// /// private storage for values set on objects /// private static ConditionalWeakTable<object, string> _commentsOnObjects = new ConditionalWeakTable<object, string>(); private static ConditionalWeakTable<object, string> _attributesOnObjects = new ConditionalWeakTable<object, string>(); } }