WPF DataTemplate ControlTemplate

FredGrit發表於2024-04-25

DataTemplate,Describes the visual structure of a data object.

ControlTemplate,Specifies the visual structure and behavioral aspects of a System.Windows.Controls.Control that can be shared across multiple instances of the control.

//DataTemplate
#region Assembly PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// location unknown
// Decompiled with ICSharpCode.Decompiler 8.1.1.7464
#endregion

using System.ComponentModel;
using System.Windows.Controls;
using System.Windows.Markup;

namespace System.Windows;

//
// Summary:
//     Describes the visual structure of a data object.
[DictionaryKeyProperty("DataTemplateKey")]
public class DataTemplate : FrameworkTemplate
{
    private object _dataType;

    private TriggerCollection _triggers;

    //
    // Summary:
    //     Gets or sets the type for which this System.Windows.DataTemplate is intended.
    //
    //
    // Returns:
    //     The default value is null.
    [DefaultValue(null)]
    [Ambient]
    public object DataType
    {
        get
        {
            return _dataType;
        }
        set
        {
            Exception ex = TemplateKey.ValidateDataType(value, "value");
            if (ex != null)
            {
                throw ex;
            }

            CheckSealed();
            _dataType = value;
        }
    }

    //
    // Summary:
    //     Gets a collection of triggers that apply property values or perform actions based
    //     on one or more conditions.
    //
    // Returns:
    //     A collection of trigger objects. The default value is null.
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [DependsOn("VisualTree")]
    [DependsOn("Template")]
    public TriggerCollection Triggers
    {
        get
        {
            if (_triggers == null)
            {
                _triggers = new TriggerCollection();
                if (base.IsSealed)
                {
                    _triggers.Seal();
                }
            }

            return _triggers;
        }
    }

    //
    // Summary:
    //     Gets the default key of the System.Windows.DataTemplate.
    //
    // Returns:
    //     The default key of the System.Windows.DataTemplate.
    public object DataTemplateKey
    {
        get
        {
            if (DataType == null)
            {
                return null;
            }

            return new DataTemplateKey(DataType);
        }
    }

    internal override Type TargetTypeInternal => DefaultTargetType;

    internal override object DataTypeInternal => DataType;

    internal override TriggerCollection TriggersInternal => Triggers;

    internal static Type DefaultTargetType => typeof(ContentPresenter);

    //
    // Summary:
    //     Initializes a new instance of the System.Windows.DataTemplate class.
    public DataTemplate()
    {
    }

    //
    // Summary:
    //     Initializes a new instance of the System.Windows.DataTemplate class with the
    //     specified System.Windows.DataTemplate.DataType property.
    //
    // Parameters:
    //   dataType:
    //     If the template is intended for object data, this is the Type name of the data
    //     object.
    public DataTemplate(object dataType)
    {
        Exception ex = TemplateKey.ValidateDataType(dataType, "dataType");
        if (ex != null)
        {
            throw ex;
        }

        _dataType = dataType;
    }

    internal override void SetTargetTypeInternal(Type targetType)
    {
        throw new InvalidOperationException(SR.Get("TemplateNotTargetType"));
    }

    //
    // Summary:
    //     Checks the templated parent against a set of rules.
    //
    // Parameters:
    //   templatedParent:
    //     The element this template is applied to.
    protected override void ValidateTemplatedParent(FrameworkElement templatedParent)
    {
        if (templatedParent == null)
        {
            throw new ArgumentNullException("templatedParent");
        }

        if (!(templatedParent is ContentPresenter))
        {
            throw new ArgumentException(SR.Get("TemplateTargetTypeMismatch", "ContentPresenter", templatedParent.GetType().Name));
        }
    }
}
#if false // Decompilation log
'15' items in cache
------------------
Resolve: 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\mscorlib.dll'
------------------
Resolve: 'System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Xaml.dll'
------------------
Resolve: 'WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Found single assembly: 'WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\WindowsBase.dll'
------------------
Resolve: 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.dll'
------------------
Resolve: 'PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Found single assembly: 'PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\PresentationCore.dll'
------------------
Resolve: 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Could not find by name: 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
------------------
Resolve: 'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Xml.dll'
------------------
Resolve: 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Core.dll'
------------------
Resolve: 'UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'PresentationUI, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'PresentationUI, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Could not find by name: 'Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
------------------
Resolve: 'System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Could not find by name: 'System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
#endif
//ControlTemplate

#region Assembly PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// location unknown
// Decompiled with ICSharpCode.Decompiler 8.1.1.7464
#endregion

using System.ComponentModel;
using System.Windows.Markup;
using System.Windows.Navigation;

namespace System.Windows.Controls;

//
// Summary:
//     Specifies the visual structure and behavioral aspects of a System.Windows.Controls.Control
//     that can be shared across multiple instances of the control.
[Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)]
[DictionaryKeyProperty("TargetType")]
public class ControlTemplate : FrameworkTemplate
{
    private Type _targetType;

    private TriggerCollection _triggers;

    internal static readonly Type DefaultTargetType = typeof(Control);

    //
    // Summary:
    //     Gets or sets the type for which this System.Windows.Controls.ControlTemplate
    //     is intended.
    //
    // Returns:
    //     The default value is null.
    //
    // Exceptions:
    //   T:System.ArgumentNullException:
    //     The System.Windows.Controls.ControlTemplate.TargetType property must not be null
    //     if the definition of the template has a System.Windows.Controls.ContentPresenter.
    //
    //
    //   T:System.ArgumentException:
    //     The specified types are not valid. The System.Windows.Controls.ControlTemplate.TargetType
    //     of a System.Windows.Controls.ControlTemplate must be or inherit from a System.Windows.Controls.Control,
    //     a System.Windows.Controls.Page, or a System.Windows.Navigation.PageFunctionBase.
    [Ambient]
    [DefaultValue(null)]
    public Type TargetType
    {
        get
        {
            return _targetType;
        }
        set
        {
            ValidateTargetType(value, "value");
            CheckSealed();
            _targetType = value;
        }
    }

    //
    // Summary:
    //     Gets a collection of System.Windows.TriggerBase objects that apply property changes
    //     or perform actions based on specified conditions.
    //
    // Returns:
    //     A collection of System.Windows.TriggerBase objects. The default value is null.
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [DependsOn("VisualTree")]
    [DependsOn("Template")]
    public TriggerCollection Triggers
    {
        get
        {
            if (_triggers == null)
            {
                _triggers = new TriggerCollection();
                if (base.IsSealed)
                {
                    _triggers.Seal();
                }
            }

            return _triggers;
        }
    }

    internal override Type TargetTypeInternal
    {
        get
        {
            if (TargetType != null)
            {
                return TargetType;
            }

            return DefaultTargetType;
        }
    }

    internal override TriggerCollection TriggersInternal => Triggers;

    //
    // Summary:
    //     Initializes a new instance of the System.Windows.Controls.ControlTemplate class.
    public ControlTemplate()
    {
    }

    //
    // Summary:
    //     Initializes a new instance of the System.Windows.Controls.ControlTemplate class
    //     with the specified target type.
    //
    // Parameters:
    //   targetType:
    //     The type this template is intended for.
    public ControlTemplate(Type targetType)
    {
        ValidateTargetType(targetType, "targetType");
        _targetType = targetType;
    }

    //
    // Summary:
    //     Checks the templated parent against a set of rules.
    //
    // Parameters:
    //   templatedParent:
    //     The element this template is applied to.
    //
    // Exceptions:
    //   T:System.ArgumentNullException:
    //     The templatedParent must not be null.
    //
    //   T:System.ArgumentException:
    //     The System.Windows.Controls.ControlTemplate.TargetType of a System.Windows.Controls.ControlTemplate
    //     must match the type of the System.Windows.Controls.Control that it is being applied
    //     to.
    //
    //   T:System.ArgumentException:
    //     You must associate the System.Windows.Controls.ControlTemplate with a System.Windows.Controls.Control
    //     by setting the System.Windows.Controls.Control.Template property before using
    //     the System.Windows.Controls.ControlTemplate on the System.Windows.Controls.Control.
    protected override void ValidateTemplatedParent(FrameworkElement templatedParent)
    {
        if (templatedParent == null)
        {
            throw new ArgumentNullException("templatedParent");
        }

        if (_targetType != null && !_targetType.IsInstanceOfType(templatedParent))
        {
            throw new ArgumentException(SR.Get("TemplateTargetTypeMismatch", _targetType.Name, templatedParent.GetType().Name));
        }

        if (templatedParent.TemplateInternal != this)
        {
            throw new ArgumentException(SR.Get("MustNotTemplateUnassociatedControl"));
        }
    }

    private void ValidateTargetType(Type targetType, string argName)
    {
        if (targetType == null)
        {
            throw new ArgumentNullException(argName);
        }

        if (!typeof(Control).IsAssignableFrom(targetType) && !typeof(Page).IsAssignableFrom(targetType) && !typeof(PageFunctionBase).IsAssignableFrom(targetType))
        {
            throw new ArgumentException(SR.Get("InvalidControlTemplateTargetType", targetType.Name));
        }
    }

    internal override void SetTargetTypeInternal(Type targetType)
    {
        TargetType = targetType;
    }
}
#if false // Decompilation log
'15' items in cache
------------------
Resolve: 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\mscorlib.dll'
------------------
Resolve: 'System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Xaml.dll'
------------------
Resolve: 'WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Found single assembly: 'WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\WindowsBase.dll'
------------------
Resolve: 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.dll'
------------------
Resolve: 'PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Found single assembly: 'PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\PresentationCore.dll'
------------------
Resolve: 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Could not find by name: 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
------------------
Resolve: 'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Xml.dll'
------------------
Resolve: 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Core.dll'
------------------
Resolve: 'UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'PresentationUI, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'PresentationUI, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Could not find by name: 'Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
------------------
Resolve: 'System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Could not find by name: 'System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
#endif
#region Assembly PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// location unknown
// Decompiled with ICSharpCode.Decompiler 8.1.1.7464
#endregion

using System.ComponentModel;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using MS.Internal.KnownBoxes;
using MS.Internal.PresentationFramework;
using MS.Utility;

namespace System.Windows.Controls;

//
// Summary:
//     Represents the base class for user interface (UI) elements that use a System.Windows.Controls.ControlTemplate
//     to define their appearance.
public class Control : FrameworkElement
{
    internal enum ControlBoolFlags : ushort
    {
        ContentIsNotLogical = 1,
        IsSpaceKeyDown = 2,
        HeaderIsNotLogical = 4,
        CommandDisabled = 8,
        ContentIsItem = 0x10,
        HeaderIsItem = 0x20,
        ScrollHostValid = 0x40,
        ContainsSelection = 0x80,
        VisualStateChangeSuspended = 0x100
    }

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.BorderBrush dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.BorderBrush dependency
    //     property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty BorderBrushProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.BorderThickness dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.BorderThickness dependency
    //     property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty BorderThicknessProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.Background dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.Background dependency
    //     property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty BackgroundProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.Foreground dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.Foreground dependency
    //     property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty ForegroundProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.FontFamily dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.FontFamily dependency
    //     property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty FontFamilyProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.FontSize dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.FontSize dependency property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty FontSizeProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.FontStretch dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.FontStretch dependency
    //     property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty FontStretchProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.FontStyle dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.FontStyle dependency property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty FontStyleProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.FontWeight dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.FontWeight dependency
    //     property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty FontWeightProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.HorizontalContentAlignment dependency
    //     property.
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.HorizontalContentAlignment
    //     dependency property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty HorizontalContentAlignmentProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.VerticalContentAlignment dependency
    //     property.
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.VerticalContentAlignment
    //     dependency property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty VerticalContentAlignmentProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.TabIndex dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.TabIndex dependency property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty TabIndexProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.IsTabStop dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.IsTabStop dependency property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty IsTabStopProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.Padding dependency property.
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.Padding dependency property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty PaddingProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.Template dependency property.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.Template dependency property.
    [CommonDependencyProperty]
    public static readonly DependencyProperty TemplateProperty;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.PreviewMouseDoubleClick routed
    //     event.
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.PreviewMouseDoubleClick
    //     routed event.
    public static readonly RoutedEvent PreviewMouseDoubleClickEvent;

    //
    // Summary:
    //     Identifies the System.Windows.Controls.Control.MouseDoubleClick routed event.
    //
    //
    // Returns:
    //     The identifier for the System.Windows.Controls.Control.MouseDoubleClick routed
    //     event.
    public static readonly RoutedEvent MouseDoubleClickEvent;

    private ControlTemplate _templateCache;

    internal ControlBoolFlags _controlBoolField;

    //
    // Summary:
    //     Gets or sets a brush that describes the border background of a control.
    //
    // Returns:
    //     The brush that is used to fill the control's border; the default is System.Windows.Media.Brushes.Transparent.
    [Bindable(true)]
    [Category("Appearance")]
    public Brush BorderBrush
    {
        get
        {
            return (Brush)GetValue(BorderBrushProperty);
        }
        set
        {
            SetValue(BorderBrushProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets the border thickness of a control.
    //
    // Returns:
    //     A thickness value; the default is a thickness of 0 on all four sides.
    [Bindable(true)]
    [Category("Appearance")]
    public Thickness BorderThickness
    {
        get
        {
            return (Thickness)GetValue(BorderThicknessProperty);
        }
        set
        {
            SetValue(BorderThicknessProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets a brush that describes the background of a control.
    //
    // Returns:
    //     The brush that is used to fill the background of the control. The default is
    //     System.Windows.Media.Brushes.Transparent.
    [Bindable(true)]
    [Category("Appearance")]
    public Brush Background
    {
        get
        {
            return (Brush)GetValue(BackgroundProperty);
        }
        set
        {
            SetValue(BackgroundProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets a brush that describes the foreground color.
    //
    // Returns:
    //     The brush that paints the foreground of the control. The default value is the
    //     system dialog font color.
    [Bindable(true)]
    [Category("Appearance")]
    public Brush Foreground
    {
        get
        {
            return (Brush)GetValue(ForegroundProperty);
        }
        set
        {
            SetValue(ForegroundProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets the font family of the control.
    //
    // Returns:
    //     A font family. The default is the system dialog font.
    [Bindable(true)]
    [Category("Appearance")]
    [Localizability(LocalizationCategory.Font)]
    public FontFamily FontFamily
    {
        get
        {
            return (FontFamily)GetValue(FontFamilyProperty);
        }
        set
        {
            SetValue(FontFamilyProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets the font size.
    //
    // Returns:
    //     The size of the text in the System.Windows.Controls.Control. The default is System.Windows.SystemFonts.MessageFontSize.
    //     The font size must be a positive number.
    [TypeConverter(typeof(FontSizeConverter))]
    [Bindable(true)]
    [Category("Appearance")]
    [Localizability(LocalizationCategory.None)]
    public double FontSize
    {
        get
        {
            return (double)GetValue(FontSizeProperty);
        }
        set
        {
            SetValue(FontSizeProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets the degree to which a font is condensed or expanded on the screen.
    //
    //
    // Returns:
    //     A System.Windows.FontStretch value. The default is System.Windows.FontStretches.Normal.
    [Bindable(true)]
    [Category("Appearance")]
    public FontStretch FontStretch
    {
        get
        {
            return (FontStretch)GetValue(FontStretchProperty);
        }
        set
        {
            SetValue(FontStretchProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets the font style.
    //
    // Returns:
    //     A System.Windows.FontStyle value. The default is System.Windows.FontStyles.Normal.
    [Bindable(true)]
    [Category("Appearance")]
    public FontStyle FontStyle
    {
        get
        {
            return (FontStyle)GetValue(FontStyleProperty);
        }
        set
        {
            SetValue(FontStyleProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets the weight or thickness of the specified font.
    //
    // Returns:
    //     A System.Windows.FontWeight value. The default is System.Windows.FontWeights.Normal.
    [Bindable(true)]
    [Category("Appearance")]
    public FontWeight FontWeight
    {
        get
        {
            return (FontWeight)GetValue(FontWeightProperty);
        }
        set
        {
            SetValue(FontWeightProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets the horizontal alignment of the control's content.
    //
    // Returns:
    //     One of the System.Windows.HorizontalAlignment values. The default is System.Windows.HorizontalAlignment.Left.
    [Bindable(true)]
    [Category("Layout")]
    public HorizontalAlignment HorizontalContentAlignment
    {
        get
        {
            return (HorizontalAlignment)GetValue(HorizontalContentAlignmentProperty);
        }
        set
        {
            SetValue(HorizontalContentAlignmentProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets the vertical alignment of the control's content.
    //
    // Returns:
    //     One of the System.Windows.VerticalAlignment values. The default is System.Windows.VerticalAlignment.Top.
    [Bindable(true)]
    [Category("Layout")]
    public VerticalAlignment VerticalContentAlignment
    {
        get
        {
            return (VerticalAlignment)GetValue(VerticalContentAlignmentProperty);
        }
        set
        {
            SetValue(VerticalContentAlignmentProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets a value that determines the order in which elements receive focus
    //     when the user navigates through controls by using the TAB key.
    //
    // Returns:
    //     A value that determines the order of logical navigation for a device. The default
    //     value is System.Int32.MaxValue.
    [Bindable(true)]
    [Category("Behavior")]
    public int TabIndex
    {
        get
        {
            return (int)GetValue(TabIndexProperty);
        }
        set
        {
            SetValue(TabIndexProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets a value that indicates whether a control is included in tab navigation.
    //
    //
    // Returns:
    //     true if the control is included in tab navigation; otherwise, false. The default
    //     is true.
    [Bindable(true)]
    [Category("Behavior")]
    public bool IsTabStop
    {
        get
        {
            return (bool)GetValue(IsTabStopProperty);
        }
        set
        {
            SetValue(IsTabStopProperty, BooleanBoxes.Box(value));
        }
    }

    //
    // Summary:
    //     Gets or sets the padding inside a control.
    //
    // Returns:
    //     The amount of space between the content of a System.Windows.Controls.Control
    //     and its System.Windows.FrameworkElement.Margin or System.Windows.Controls.Border.
    //     The default is a thickness of 0 on all four sides.
    [Bindable(true)]
    [Category("Layout")]
    public Thickness Padding
    {
        get
        {
            return (Thickness)GetValue(PaddingProperty);
        }
        set
        {
            SetValue(PaddingProperty, value);
        }
    }

    //
    // Summary:
    //     Gets or sets a control template.
    //
    // Returns:
    //     The template that defines the appearance of the System.Windows.Controls.Control.
    public ControlTemplate Template
    {
        get
        {
            return _templateCache;
        }
        set
        {
            SetValue(TemplateProperty, value);
        }
    }

    internal override FrameworkTemplate TemplateInternal => Template;

    internal override FrameworkTemplate TemplateCache
    {
        get
        {
            return _templateCache;
        }
        set
        {
            _templateCache = (ControlTemplate)value;
        }
    }

    //
    // Summary:
    //     Gets a value that indicates whether a control supports scrolling.
    //
    // Returns:
    //     true if the control has a System.Windows.Controls.ScrollViewer in its style and
    //     has a custom keyboard scrolling behavior; otherwise, false.
    protected internal virtual bool HandlesScrolling => false;

    internal bool VisualStateChangeSuspended
    {
        get
        {
            return ReadControlFlag(ControlBoolFlags.VisualStateChangeSuspended);
        }
        set
        {
            WriteControlFlag(ControlBoolFlags.VisualStateChangeSuspended, value);
        }
    }

    //
    // Summary:
    //     Occurs when a user clicks the mouse button two or more times.
    public event MouseButtonEventHandler PreviewMouseDoubleClick
    {
        add
        {
            AddHandler(PreviewMouseDoubleClickEvent, value);
        }
        remove
        {
            RemoveHandler(PreviewMouseDoubleClickEvent, value);
        }
    }

    //
    // Summary:
    //     Occurs when a mouse button is clicked two or more times.
    public event MouseButtonEventHandler MouseDoubleClick
    {
        add
        {
            AddHandler(MouseDoubleClickEvent, value);
        }
        remove
        {
            RemoveHandler(MouseDoubleClickEvent, value);
        }
    }

    static Control()
    {
        BorderBrushProperty = Border.BorderBrushProperty.AddOwner(typeof(Control), new FrameworkPropertyMetadata(Border.BorderBrushProperty.DefaultMetadata.DefaultValue, FrameworkPropertyMetadataOptions.None));
        BorderThicknessProperty = Border.BorderThicknessProperty.AddOwner(typeof(Control), new FrameworkPropertyMetadata(Border.BorderThicknessProperty.DefaultMetadata.DefaultValue, FrameworkPropertyMetadataOptions.None));
        BackgroundProperty = Panel.BackgroundProperty.AddOwner(typeof(Control), new FrameworkPropertyMetadata(Panel.BackgroundProperty.DefaultMetadata.DefaultValue, FrameworkPropertyMetadataOptions.None));
        ForegroundProperty = TextElement.ForegroundProperty.AddOwner(typeof(Control), new FrameworkPropertyMetadata(SystemColors.ControlTextBrush, FrameworkPropertyMetadataOptions.Inherits));
        FontFamilyProperty = TextElement.FontFamilyProperty.AddOwner(typeof(Control), new FrameworkPropertyMetadata(SystemFonts.MessageFontFamily, FrameworkPropertyMetadataOptions.Inherits));
        FontSizeProperty = TextElement.FontSizeProperty.AddOwner(typeof(Control), new FrameworkPropertyMetadata(SystemFonts.MessageFontSize, FrameworkPropertyMetadataOptions.Inherits));
        FontStretchProperty = TextElement.FontStretchProperty.AddOwner(typeof(Control), new FrameworkPropertyMetadata(TextElement.FontStretchProperty.DefaultMetadata.DefaultValue, FrameworkPropertyMetadataOptions.Inherits));
        FontStyleProperty = TextElement.FontStyleProperty.AddOwner(typeof(Control), new FrameworkPropertyMetadata(SystemFonts.MessageFontStyle, FrameworkPropertyMetadataOptions.Inherits));
        FontWeightProperty = TextElement.FontWeightProperty.AddOwner(typeof(Control), new FrameworkPropertyMetadata(SystemFonts.MessageFontWeight, FrameworkPropertyMetadataOptions.Inherits));
        HorizontalContentAlignmentProperty = DependencyProperty.Register("HorizontalContentAlignment", typeof(HorizontalAlignment), typeof(Control), new FrameworkPropertyMetadata(HorizontalAlignment.Left), FrameworkElement.ValidateHorizontalAlignmentValue);
        VerticalContentAlignmentProperty = DependencyProperty.Register("VerticalContentAlignment", typeof(VerticalAlignment), typeof(Control), new FrameworkPropertyMetadata(VerticalAlignment.Top), FrameworkElement.ValidateVerticalAlignmentValue);
        TabIndexProperty = KeyboardNavigation.TabIndexProperty.AddOwner(typeof(Control));
        IsTabStopProperty = KeyboardNavigation.IsTabStopProperty.AddOwner(typeof(Control));
        PaddingProperty = DependencyProperty.Register("Padding", typeof(Thickness), typeof(Control), new FrameworkPropertyMetadata(default(Thickness), FrameworkPropertyMetadataOptions.AffectsParentMeasure));
        TemplateProperty = DependencyProperty.Register("Template", typeof(ControlTemplate), typeof(Control), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsMeasure, OnTemplateChanged));
        PreviewMouseDoubleClick = EventManager.RegisterRoutedEvent("PreviewMouseDoubleClick", RoutingStrategy.Direct, typeof(MouseButtonEventHandler), typeof(Control));
        MouseDoubleClick = EventManager.RegisterRoutedEvent("MouseDoubleClick", RoutingStrategy.Direct, typeof(MouseButtonEventHandler), typeof(Control));
        UIElement.FocusableProperty.OverrideMetadata(typeof(Control), new FrameworkPropertyMetadata(BooleanBoxes.TrueBox));
        EventManager.RegisterClassHandler(typeof(Control), UIElement.PreviewMouseLeftButtonDown, new MouseButtonEventHandler(HandleDoubleClick), handledEventsToo: true);
        EventManager.RegisterClassHandler(typeof(Control), UIElement.MouseLeftButtonDown, new MouseButtonEventHandler(HandleDoubleClick), handledEventsToo: true);
        EventManager.RegisterClassHandler(typeof(Control), UIElement.PreviewMouseRightButtonDown, new MouseButtonEventHandler(HandleDoubleClick), handledEventsToo: true);
        EventManager.RegisterClassHandler(typeof(Control), UIElement.MouseRightButtonDown, new MouseButtonEventHandler(HandleDoubleClick), handledEventsToo: true);
        UIElement.IsKeyboardFocusedPropertyKey.OverrideMetadata(typeof(Control), new PropertyMetadata(OnVisualStatePropertyChanged));
    }

    //
    // Summary:
    //     Initializes a new instance of the System.Windows.Controls.Control class.
    public Control()
    {
        PropertyMetadata metadata = TemplateProperty.GetMetadata(base.DependencyObjectType);
        ControlTemplate controlTemplate = (ControlTemplate)metadata.DefaultValue;
        if (controlTemplate != null)
        {
            OnTemplateChanged(this, new DependencyPropertyChangedEventArgs(TemplateProperty, metadata, null, controlTemplate));
        }
    }

    private static bool IsMarginValid(object value)
    {
        Thickness thickness = (Thickness)value;
        if (thickness.Left >= 0.0 && thickness.Right >= 0.0 && thickness.Top >= 0.0)
        {
            return thickness.Bottom >= 0.0;
        }

        return false;
    }

    internal override void OnTemplateChangedInternal(FrameworkTemplate oldTemplate, FrameworkTemplate newTemplate)
    {
        OnTemplateChanged((ControlTemplate)oldTemplate, (ControlTemplate)newTemplate);
    }

    private static void OnTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        Control fe = (Control)d;
        StyleHelper.UpdateTemplateCache(fe, (FrameworkTemplate)e.OldValue, (FrameworkTemplate)e.NewValue, TemplateProperty);
    }

    //
    // Summary:
    //     Called whenever the control's template changes.
    //
    // Parameters:
    //   oldTemplate:
    //     The old template.
    //
    //   newTemplate:
    //     The new template.
    protected virtual void OnTemplateChanged(ControlTemplate oldTemplate, ControlTemplate newTemplate)
    {
    }

    //
    // Summary:
    //     Returns the string representation of a System.Windows.Controls.Control object.
    //
    //
    // Returns:
    //     A string that represents the control.
    public override string ToString()
    {
        string text = null;
        text = ((!CheckAccess()) ? ((string)base.Dispatcher.Invoke(DispatcherPriority.Send, new TimeSpan(0, 0, 0, 0, 20), (DispatcherOperationCallback)((object o) => GetPlainText()), null)) : GetPlainText());
        if (!string.IsNullOrEmpty(text))
        {
            return SR.Get("ToStringFormatString_Control", base.ToString(), text);
        }

        return base.ToString();
    }

    //
    // Summary:
    //     Raises the System.Windows.Controls.Control.PreviewMouseDoubleClick routed event.
    //
    //
    // Parameters:
    //   e:
    //     The event data.
    protected virtual void OnPreviewMouseDoubleClick(MouseButtonEventArgs e)
    {
        RaiseEvent(e);
    }

    //
    // Summary:
    //     Raises the System.Windows.Controls.Control.MouseDoubleClick routed event.
    //
    // Parameters:
    //   e:
    //     The event data.
    protected virtual void OnMouseDoubleClick(MouseButtonEventArgs e)
    {
        RaiseEvent(e);
    }

    private static void HandleDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (e.ClickCount == 2)
        {
            Control control = (Control)sender;
            MouseButtonEventArgs mouseButtonEventArgs = new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, e.ChangedButton, e.StylusDevice);
            if (e.RoutedEvent == UIElement.PreviewMouseLeftButtonDown || e.RoutedEvent == UIElement.PreviewMouseRightButtonDown)
            {
                mouseButtonEventArgs.RoutedEvent = PreviewMouseDoubleClick;
                mouseButtonEventArgs.Source = e.OriginalSource;
                mouseButtonEventArgs.OverrideSource(e.Source);
                control.OnPreviewMouseDoubleClick(mouseButtonEventArgs);
            }
            else
            {
                mouseButtonEventArgs.RoutedEvent = MouseDoubleClick;
                mouseButtonEventArgs.Source = e.OriginalSource;
                mouseButtonEventArgs.OverrideSource(e.Source);
                control.OnMouseDoubleClick(mouseButtonEventArgs);
            }

            if (mouseButtonEventArgs.Handled)
            {
                e.Handled = true;
            }
        }
    }

    internal override void OnPreApplyTemplate()
    {
        VisualStateChangeSuspended = true;
        base.OnPreApplyTemplate();
    }

    internal override void OnPostApplyTemplate()
    {
        base.OnPostApplyTemplate();
        VisualStateChangeSuspended = false;
        UpdateVisualState(useTransitions: false);
    }

    internal void UpdateVisualState()
    {
        UpdateVisualState(useTransitions: true);
    }

    internal void UpdateVisualState(bool useTransitions)
    {
        EventTrace.EasyTraceEvent(EventTrace.Keyword.KeywordGeneral | EventTrace.Keyword.KeywordPerf, EventTrace.Level.Info, EventTrace.Event.UpdateVisualStateStart);
        if (!VisualStateChangeSuspended)
        {
            ChangeVisualState(useTransitions);
        }

        EventTrace.EasyTraceEvent(EventTrace.Keyword.KeywordGeneral | EventTrace.Keyword.KeywordPerf, EventTrace.Level.Info, EventTrace.Event.UpdateVisualStateEnd);
    }

    internal virtual void ChangeVisualState(bool useTransitions)
    {
        ChangeValidationVisualState(useTransitions);
    }

    internal void ChangeValidationVisualState(bool useTransitions)
    {
        if (Validation.GetHasError(this))
        {
            if (base.IsKeyboardFocused)
            {
                VisualStateManager.GoToState(this, "InvalidFocused", useTransitions);
            }
            else
            {
                VisualStateManager.GoToState(this, "InvalidUnfocused", useTransitions);
            }
        }
        else
        {
            VisualStateManager.GoToState(this, "Valid", useTransitions);
        }
    }

    internal static void OnVisualStatePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (d is Control control)
        {
            control.UpdateVisualState();
        }
    }

    //
    // Summary:
    //     Called to remeasure a control.
    //
    // Parameters:
    //   constraint:
    //     The maximum size that the method can return.
    //
    // Returns:
    //     The size of the control, up to the maximum specified by constraint.
    protected override Size MeasureOverride(Size constraint)
    {
        int visualChildrenCount = VisualChildrenCount;
        if (visualChildrenCount > 0)
        {
            UIElement uIElement = (UIElement)GetVisualChild(0);
            if (uIElement != null)
            {
                uIElement.Measure(constraint);
                return uIElement.DesiredSize;
            }
        }

        return new Size(0.0, 0.0);
    }

    //
    // Summary:
    //     Called to arrange and size the content of a System.Windows.Controls.Control object.
    //
    //
    // Parameters:
    //   arrangeBounds:
    //     The computed size that is used to arrange the content.
    //
    // Returns:
    //     The size of the control.
    protected override Size ArrangeOverride(Size arrangeBounds)
    {
        int visualChildrenCount = VisualChildrenCount;
        if (visualChildrenCount > 0)
        {
            ((UIElement)GetVisualChild(0))?.Arrange(new Rect(arrangeBounds));
        }

        return arrangeBounds;
    }

    internal bool ReadControlFlag(ControlBoolFlags reqFlag)
    {
        return (_controlBoolField & reqFlag) != 0;
    }

    internal void WriteControlFlag(ControlBoolFlags reqFlag, bool set)
    {
        if (set)
        {
            _controlBoolField |= reqFlag;
        }
        else
        {
            _controlBoolField &= (ControlBoolFlags)(ushort)(~(int)reqFlag);
        }
    }
}
#if false // Decompilation log
'15' items in cache
------------------
Resolve: 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\mscorlib.dll'
------------------
Resolve: 'System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Xaml.dll'
------------------
Resolve: 'WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Found single assembly: 'WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\WindowsBase.dll'
------------------
Resolve: 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.dll'
------------------
Resolve: 'PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Found single assembly: 'PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\PresentationCore.dll'
------------------
Resolve: 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Could not find by name: 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
------------------
Resolve: 'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Xml.dll'
------------------
Resolve: 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Found single assembly: 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Load from: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Core.dll'
------------------
Resolve: 'UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'PresentationUI, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'PresentationUI, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Could not find by name: 'System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
------------------
Resolve: 'Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Could not find by name: 'Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
------------------
Resolve: 'System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Could not find by name: 'System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
#endif

相關文章