コード例 #1
0
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        object returnValue = null;

        try
        {
            IProvideValueTarget service = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));

            Binding binding = null;

            if (this.Path is string)
            {
                binding = new Binding {
                    Mode = BindingMode.OneWay
                };
            }
            else if (this.Path is Binding)
            {
                binding = Path as Binding;
            }
            else if (this.Path is ImageSource)
            {
                return(this.Path);
            }
            else if (this.Path is System.Windows.Expression)
            {
                ResourceReferenceExpressionConverter cnv = new ResourceReferenceExpressionConverter();
                DynamicResourceExtension             mex = null;
                try
                {
                    mex = (MarkupExtension)cnv.ConvertTo(this.Path, typeof(MarkupExtension))
                          as DynamicResourceExtension;
                }
                catch (Exception) { }

                if (mex != null)
                {
                    FrameworkElement targetObject = service.TargetObject as FrameworkElement;
                    if (targetObject == null)
                    {
                        return(Utils.GetEmpty());
                    }
                    return(targetObject.TryFindResource(mex.ResourceKey as string));
                }
            }
            else
            {
                return(Utils.GetEmpty());
            }


            binding.Converter          = new Converter_StringToImageSource();
            binding.ConverterParameter = Path is Binding ? null : Path as string;

            returnValue = binding.ProvideValue(serviceProvider);
        }
        catch (Exception) { returnValue = Utils.GetEmpty(); }
        return(returnValue);
    }
コード例 #2
0
 static DependencyObjectExtensions()
 {
     ResourceReferenceExpressionConverter = new ResourceReferenceExpressionConverter();
 }