AssignDesigner.xaml.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Core.Presentation / System / Activities / Core / Presentation / AssignDesigner.xaml.cs / 1305376 / AssignDesigner.xaml.cs

                            //---------------------------------------------------------------- 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//---------------------------------------------------------------

namespace System.Activities.Core.Presentation 
{
    using System.Activities.Presentation; 
    using System.Activities.Presentation.Metadata; 
    using System.Activities.Statements;
    using System.ComponentModel; 
    using System.Activities.Presentation.Model;
    using System.Runtime;
    using Microsoft.VisualBasic.Activities;
    using System.Reflection; 

    partial class AssignDesigner 
    { 
        const string ToPropertyName = "To";
        const string ValuePropertyName = "Value"; 

        PropertyChangedEventHandler modelItemPropertyChangedHandler;

        public AssignDesigner() 
        {
            this.InitializeComponent(); 
        } 

        PropertyChangedEventHandler ModelItemPropertyChangedHandler 
        {
            get
            {
                if (this.modelItemPropertyChangedHandler == null) 
                {
                    this.modelItemPropertyChangedHandler = new PropertyChangedEventHandler(modelItem_PropertyChanged); 
                } 

                return this.modelItemPropertyChangedHandler; 
            }
        }

        protected override void OnInitialized(EventArgs e) 
        {
            base.OnInitialized(e); 
 
            this.Unloaded += (sender, eventArgs) =>
            { 
                AssignDesigner designer = sender as AssignDesigner;
                if (designer != null && designer.ModelItem != null)
                {
                    designer.ModelItem.PropertyChanged -= designer.ModelItemPropertyChangedHandler; 
                }
            }; 
        } 

        internal static void RegisterMetadata(AttributeTableBuilder builder) 
        {
            Type assignType = typeof(Assign);
            builder.AddCustomAttributes(assignType, new DesignerAttribute(typeof(AssignDesigner)));
            builder.AddCustomAttributes(assignType, new ActivityDesignerOptionsAttribute { AllowDrillIn = false }); 

            ArgumentFixer.RegisterArgumentFixer( 
                   new ActivityArgumentFixer( 
                       (assign, isLocation) => isLocation ? (Argument)assign.To : (Argument)assign.Value,
                       (assign, argument) => { 
                           if (argument is InArgument)
                           {
                               assign.Value = (InArgument)argument;
                           } 
                           else
                           { 
                               assign.To = (OutArgument)argument; 
                           }
                       })); 
        }

        protected override void OnModelItemChanged(object newItem)
        { 
            ModelItem modelItem = newItem as ModelItem;
            if (modelItem != null) 
            { 
                modelItem.PropertyChanged += ModelItemPropertyChangedHandler;
            } 
            base.OnModelItemChanged(newItem);
        }

        void modelItem_PropertyChanged(object sender, PropertyChangedEventArgs e) 
        {
            //if the To argument has changed, we may need to update the Value argument's type 
            if (e.PropertyName == ToPropertyName) 
            {
                Fx.Assert(this.ModelItem != null, "modelItem could not be null if we recent property changed event from it"); 

                ModelProperty valueProperty = this.ModelItem.Properties[ValuePropertyName];
                ModelProperty toProperty = this.ModelItem.Properties[ToPropertyName];
 
                Fx.Assert(valueProperty != null, "Value model property could not be null");
                Fx.Assert(toProperty != null, "To model property could not be null"); 
 
                Argument value = valueProperty.ComputedValue as Argument;
                Argument to = toProperty.ComputedValue as Argument; 

                if (value != null)
                {
                    Type targetType = to == null? typeof(object) : to.ArgumentType; 
                    if (value.ArgumentType != targetType)
                    { 
                        valueProperty.SetValue(MorphHelpers.MorphArgument(valueProperty.Value, targetType)); 
                    }
                } 
            }
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK