예제 #1
0
        private static object CreateXmlDataContext(DataSourceInfo dataSource, SceneViewModel viewModel)
        {
            DocumentNode sourceNode = dataSource.SourceNode;
            object       obj        = (object)null;

            using (StandaloneInstanceBuilderContext instanceBuilderContext = new StandaloneInstanceBuilderContext(viewModel.Document.DocumentContext, viewModel.DesignerContext))
            {
                try
                {
                    IInstanceBuilder builder  = instanceBuilderContext.InstanceBuilderFactory.GetBuilder(sourceNode.TargetType);
                    ViewNode         viewNode = builder.GetViewNode((IInstanceBuilderContext)instanceBuilderContext, sourceNode);
                    obj = (object)(bool)(builder.Instantiate((IInstanceBuilderContext)instanceBuilderContext, viewNode) ? true : false);
                }
                catch
                {
                }
            }
            ReferenceStep referenceStep  = (ReferenceStep)viewModel.ProjectContext.ResolveProperty(XmlDataProviderSceneNode.XPathProperty);
            string        inheritedXPath = referenceStep.GetValue(obj) as string;

            if (string.IsNullOrEmpty(inheritedXPath))
            {
                inheritedXPath = dataSource.Path;
            }
            else if (!string.IsNullOrEmpty(dataSource.Path))
            {
                inheritedXPath = XmlSchema.CombineXPaths(inheritedXPath, dataSource.Path);
            }
            if (!string.IsNullOrEmpty(inheritedXPath))
            {
                referenceStep.SetValue(obj, (object)inheritedXPath);
            }
            return(obj);
        }
예제 #2
0
        private static void RunDesignModeValueProvider(object target, IPlatform platform, ValueTranslationService valueTranslationService, IType type, Type runtimeType, PropertyIdentifier property, ReferenceStep referenceStep, bool isFirstTime)
        {
            if (!runtimeType.IsAssignableFrom(target.GetType()))
            {
                return;
            }
            ModelItem modelItemForObject = DesignModeValueProviderService.GetModelItemForObject(platform, target);

            if (modelItemForObject == null)
            {
                return;
            }
            ReferenceStep referenceStep1 = (ReferenceStep)DesignTimeProperties.GetShadowProperty((IProperty)referenceStep, (ITypeId)type);

            try
            {
                object valueToSet;
                if (isFirstTime && !referenceStep1.IsSet(target))
                {
                    valueToSet = referenceStep.GetValue(target);
                    referenceStep1.SetValue(target, valueToSet);
                }
                else
                {
                    valueToSet = referenceStep1.GetValue(target);
                }
                referenceStep.SetValue(target, valueTranslationService.TranslatePropertyValue(runtimeType, modelItemForObject, property, valueToSet));
            }
            catch (Exception ex)
            {
            }
        }
예제 #3
0
        protected override DocumentNode CreateValue(BaseFrameworkElement source)
        {
            object tileBrush = this.CreateTileBrush(source);

            if (tileBrush == null)
            {
                return((DocumentNode)null);
            }
            ITypeResolver typeResolver = (ITypeResolver)source.ProjectContext;
            IViewObject   visual       = source.Visual;

            if (visual != null)
            {
                object platformSpecificObject = visual.PlatformSpecificObject;
                if (platformSpecificObject != null && PlatformTypes.Image.IsAssignableFrom((ITypeId)visual.GetIType((ITypeResolver)this.SceneViewModel.ProjectContext)))
                {
                    ReferenceStep referenceStep = typeResolver.ResolveProperty(TileBrushNode.StretchProperty) as ReferenceStep;
                    object        obj           = referenceStep.GetValue(tileBrush);
                    object        valueToSet    = (typeResolver.ResolveProperty(ImageElement.StretchProperty) as ReferenceStep).GetValue(platformSpecificObject);
                    if (!obj.Equals(valueToSet))
                    {
                        referenceStep.SetValue(tileBrush, valueToSet);
                    }
                }
            }
            return(this.SceneViewModel.Document.DocumentContext.CreateNode(typeResolver.ResolveType(PlatformTypes.TileBrush).RuntimeType, tileBrush));
        }
예제 #4
0
        protected string GetVisualStateName(object state)
        {
            ReferenceStep referenceStep = this.ResolveTypeIdProperty(ProjectNeutralTypes.VisualState, "Name");

            if (state != null && referenceStep != null)
            {
                return(referenceStep.GetValue(state) as string);
            }
            return((string)null);
        }
예제 #5
0
        protected IList GetVisualStateGroupStates(object group)
        {
            ReferenceStep referenceStep = this.ResolveTypeIdProperty(ProjectNeutralTypes.VisualStateGroup, "States");

            if (group != null && referenceStep != null)
            {
                return(referenceStep.GetValue(group) as IList);
            }
            return((IList) new List <object>());
        }
예제 #6
0
        private object ConvertImageBrush(object value, object result, ITypeResolver sourceTypeResolver, ITypeResolver targetTypeResolver)
        {
            ReferenceStep referenceStep1 = (ReferenceStep)sourceTypeResolver.ResolveProperty(TileBrushNode.StretchProperty);
            ReferenceStep referenceStep2 = (ReferenceStep)targetTypeResolver.ResolveProperty(TileBrushNode.StretchProperty);
            object        valueToSet1    = this.ConvertInternalFast(referenceStep1.GetValue(value), sourceTypeResolver, targetTypeResolver);

            referenceStep2.SetValue(result, valueToSet1);
            object objToInspect = ((ReferenceStep)sourceTypeResolver.ResolveProperty(ImageBrushNode.ImageSourceProperty)).GetValue(value);

            if (!PlatformTypes.IsInstance(objToInspect, PlatformTypes.BitmapImage, sourceTypeResolver))
            {
                return(result);
            }
            object obj1 = ((ReferenceStep)sourceTypeResolver.ResolveProperty(BitmapImageNode.UriSourceProperty)).GetValue(objToInspect);

            if (obj1 == null)
            {
                return(result);
            }
            Type   type1 = obj1.GetType();
            IType  type2 = targetTypeResolver.ResolveType(PlatformTypes.Uri);
            string text  = Microsoft.Expression.DesignModel.Metadata.MetadataStore.GetTypeConverter(type1).ConvertToInvariantString(obj1);

            if (string.IsNullOrEmpty(text))
            {
                return(result);
            }
            object        valueToSet2    = Microsoft.Expression.DesignModel.Metadata.MetadataStore.GetTypeConverter(type2.RuntimeType).ConvertFromInvariantString(text);
            ReferenceStep referenceStep3 = (ReferenceStep)targetTypeResolver.ResolveProperty(ImageBrushNode.ImageSourceProperty);
            object        obj2           = InstanceBuilderOperations.InstantiateType(targetTypeResolver.ResolveType(PlatformTypes.BitmapImage).RuntimeType, true);

            referenceStep3.SetValue(result, obj2);
            try
            {
                BitmapImage bitmapImage = obj2 as BitmapImage;
                if (bitmapImage != null)
                {
                    bitmapImage.BeginInit();
                    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
                }
                ((ReferenceStep)targetTypeResolver.ResolveProperty(BitmapImageNode.UriSourceProperty)).SetValue(obj2, valueToSet2);
                if (bitmapImage != null)
                {
                    bitmapImage.EndInit();
                }
            }
            catch (Exception ex)
            {
                result = (object)null;
            }
            return(result);
        }
예제 #7
0
 public void OnInitialized(IInstanceBuilderContext context, ViewNode target, object instance)
 {
     if (instance != null && this.targetType.IsAssignableFrom(instance.GetType()))
     {
         ITypeResolver typeResolver = target.DocumentNode.TypeResolver;
         IPlatform     platform     = context.Platform;
         platform.ViewObjectFactory.Instantiate(instance).SetValue(typeResolver, typeResolver.ResolveProperty(DesignTimeProperties.InstanceBuilderContextProperty), (object)new WeakReference((object)context));
         IDesignModeValueProviderContext valueProviderContext = context as IDesignModeValueProviderContext;
         if (valueProviderContext != null)
         {
             ValueTranslationService valueTranslationService = valueProviderContext.ValueTranslationService;
             foreach (PropertyIdentifier identifier in valueTranslationService.GetProperties(this.targetType))
             {
                 if (valueTranslationService.HasValueTranslation(this.targetType, identifier))
                 {
                     ReferenceStep referenceStep = target.Type.GetMember(MemberType.Property, identifier.Name, MemberAccessTypes.All) as ReferenceStep;
                     if (referenceStep != null)
                     {
                         if (!target.Properties.ContainsKey((IProperty)referenceStep))
                         {
                             ReferenceStep referenceStep1 = (ReferenceStep)DesignTimeProperties.GetShadowProperty((IProperty)referenceStep, (ITypeId)target.Type);
                             object        valueToSet     = referenceStep.GetValue(instance);
                             if (typeResolver.IsCapabilitySet(PlatformCapability.IsWpf) || valueToSet != null)
                             {
                                 referenceStep1.SetValue(instance, valueToSet);
                             }
                         }
                         PropertyIdentifier localProperty = identifier;
                         UIThreadDispatcherHelper.BeginInvoke(DispatcherPriority.Send, (Delegate)(o =>
                         {
                             if (target.Parent != null)
                             {
                                 DesignModeValueProviderService.RunDesignModeValueProvider(instance, platform, valueTranslationService, target.Type, this.targetType, localProperty, referenceStep, true);
                             }
                             return((object)null);
                         }), (object)null);
                     }
                 }
             }
         }
     }
     if (!context.IsSerializationScope)
     {
         return;
     }
     this.builder.OnInitialized(context, target, instance);
 }
예제 #8
0
        private static bool ShouldSet(SceneNode node, IPropertyId property)
        {
            ReferenceStep referenceStep = node.ProjectContext.ResolveProperty(property) as ReferenceStep;

            if (referenceStep == null)
            {
                return(false);
            }
            IViewObject viewObject   = node.IsViewObjectValid ? node.ViewObject : (IViewObject)null;
            object      objToInspect = viewObject != null ? viewObject.PlatformSpecificObject : (object)null;

            if (objToInspect == null || referenceStep.IsSet(objToInspect))
            {
                return(false);
            }
            return(object.Equals(referenceStep.GetDefaultValue(objToInspect.GetType()), referenceStep.GetValue(objToInspect)));
        }
예제 #9
0
        private bool SetViewContentWorker(ViewContentType contentType, ViewNode target, object content)
        {
            object obj = content;

            if (contentType == ViewContentType.Content)
            {
                if (!this.isRootInstanceKnownInvalid && this.postponedUpdate == SceneView.PostponedUpdate.None && (this.currentScopedInstance == content && this.currentContentType == ViewContentType.Content))
                {
                    this.ApplyNameScope(this.rootNameScope as SilverlightNameScope);
                    this.UpdateViewContentIfNecessary(false);
                    return(false);
                }
                if (content != null)
                {
                    ViewContent viewContent = this.ProvideViewContent(target, content);
                    contentType = viewContent.ViewContentType;
                    content     = viewContent.Content;
                    if (content != null && contentType == ViewContentType.Content && !this.Document.ProjectContext.ResolveType(PlatformTypes.FrameworkElement).RuntimeType.IsAssignableFrom(content.GetType()))
                    {
                        contentType = ViewContentType.DefaultMessage;
                    }
                }
                else
                {
                    contentType = ViewContentType.DefaultMessage;
                }
                if (!this.isRootInstanceKnownInvalid && this.currentScopedInstance == null && (content == null && this.currentContentType == ViewContentType.DefaultMessage))
                {
                    return(false);
                }
            }
            ViewContentType viewContentType = this.currentContentType;

            this.currentContentType = contentType;
            if (contentType == ViewContentType.Content)
            {
                this.currentScopedInstance  = obj;
                this.imageHost.RootInstance = content;
                this.hitTestRoot            = this.Platform.ViewObjectFactory.Instantiate(this.imageHost.HitTestRoot) as IViewVisual;
                if (this.currentContentType != contentType)
                {
                    return(true);
                }
                this.isRootInstanceKnownInvalid = false;
                if (viewContentType != ViewContentType.Content)
                {
                    this.imageHost.Redraw(true);
                }
                this.UpdateRootBounds();
                this.UpdateLayout();
                this.disposedExceptionCaught   = false;
                this.catastrohpicFailureCaught = false;
            }
            else
            {
                this.imageHost.RootInstance = (object)null;
                this.currentScopedInstance  = (object)null;
            }
            this.ClearAdornerSets();
            bool flag = false;

            if (contentType == ViewContentType.Content)
            {
                ReferenceStep referenceStep1 = this.ProjectContext.ResolveProperty(BaseFrameworkElement.ActualWidthProperty) as ReferenceStep;
                ReferenceStep referenceStep2 = this.ProjectContext.ResolveProperty(BaseFrameworkElement.ActualHeightProperty) as ReferenceStep;
                double        num1           = (double)referenceStep1.GetValue(content);
                double        num2           = (double)referenceStep2.GetValue(content);
                if (!double.IsNaN(num1) && !double.IsNaN(num2))
                {
                    this.SetContentSize(new Size(num1, num2));
                    flag = true;
                }
            }
            if (!flag)
            {
                if (this.ViewModel.PreferredSize != Size.Empty)
                {
                    this.SetContentSize(new Size(this.ViewModel.PreferredSize.Width, this.ViewModel.PreferredSize.Height));
                }
                else
                {
                    this.SetContentSize(new Size(20.0, 20.0));
                }
            }
            switch (contentType)
            {
            case ViewContentType.DefaultMessage:
                this.IsDefaultMessageDisplayed = true;
                this.MessageContent            = (object)null;
                break;

            case ViewContentType.Content:
                this.IsDefaultMessageDisplayed = false;
                this.MessageContent            = (object)null;
                this.ApplyNameScope(this.rootNameScope as SilverlightNameScope);
                break;

            default:
                this.IsDefaultMessageDisplayed = false;
                this.MessageContent            = content;
                break;
            }
            return(true);
        }
예제 #10
0
        private object ConvertInternalFast(object value, ITypeResolver sourceTypeResolver, ITypeResolver targetTypeResolver)
        {
            if (value == null)
            {
                return(value);
            }
            Type   type         = value.GetType();
            IType  platformType = ((IPlatformTypes)targetTypeResolver.PlatformMetadata).GetPlatformType(type.FullName);
            Type   runtimeType  = platformType.RuntimeType;
            object obj1;

            if (type.IsPrimitive || type.IsEnum)
            {
                if (runtimeType == (Type)null)
                {
                    return((object)null);
                }
                if (runtimeType.Equals(type))
                {
                    obj1 = value;
                }
                else
                {
                    TypeConverter typeConverter = Microsoft.Expression.DesignModel.Metadata.MetadataStore.GetTypeConverter(type);
                    obj1 = Microsoft.Expression.DesignModel.Metadata.MetadataStore.GetTypeConverter(runtimeType).ConvertFromInvariantString(typeConverter.ConvertToInvariantString(value));
                }
            }
            else
            {
                if (runtimeType == (Type)null)
                {
                    return((object)null);
                }
                obj1 = InstanceBuilderOperations.InstantiateType(runtimeType, true);
                if (obj1 != null && PlatformTypes.ImageBrush.IsAssignableFrom((ITypeId)platformType))
                {
                    return(this.ConvertImageBrush(value, obj1, sourceTypeResolver, targetTypeResolver));
                }
                if (!type.IsValueType)
                {
                    CollectionAdapterDescription adapterDescription = CollectionAdapterDescription.GetAdapterDescription(type);
                    if (adapterDescription != null)
                    {
                        IList list = CollectionAdapterDescription.GetAdapterDescription(runtimeType).GetCollectionAdapter(obj1) as IList;
                        foreach (object obj2 in (IEnumerable)adapterDescription.GetCollectionAdapter(value))
                        {
                            object obj3 = this.ConvertInternalFast(obj2, sourceTypeResolver, targetTypeResolver);
                            list.Add(obj3);
                        }
                    }
                }
                foreach (IProperty property in ((IPlatformTypes)sourceTypeResolver.PlatformMetadata).GetType(type).GetProperties(MemberAccessTypes.Public))
                {
                    ReferenceStep referenceStep1 = property as ReferenceStep;
                    if (referenceStep1 != null && referenceStep1.ReadAccess == MemberAccessType.Public && referenceStep1.WriteAccess == MemberAccessType.Public)
                    {
                        ReferenceStep referenceStep2 = platformType.GetMember(MemberType.Property, referenceStep1.Name, MemberAccessTypes.Public) as ReferenceStep;
                        if (referenceStep2 != null && referenceStep2.ReadAccess == MemberAccessType.Public && referenceStep2.WriteAccess == MemberAccessType.Public)
                        {
                            object valueToSet = this.ConvertInternalFast(referenceStep1.GetValue(value), sourceTypeResolver, targetTypeResolver);
                            referenceStep2.SetValue(obj1, valueToSet);
                        }
                    }
                }
            }
            return(obj1);
        }