@kohashi
一般的には、as演算子はユーザ定義したキャスト演算子を考慮しません。
そのため、以下のコードはng, ng, ok, okを返します。

```csharp
using System;

namespace AsOperatorSample
{
    public class Sample
    {
        readonly string value;

        public Sample(string value)
        {
            this.value = value;
        }

        public static implicit operator Sample(string x)
        {
            return new Sample(x);
        }

        public static explicit operator string(Sample x)
        {
            return x.value;
        }
    }

    class Program
    {
        static void OkIfNotNull(object x)
        {
            if (x != null)
                Console.WriteLine("ok");
            else
                Console.WriteLine("ng");
        }

        static void Main(string[] args)
        {
            // stringからSampleに、as演算子を用いて変換してみる。
            {
                object target = "sample";
                Sample sample = target as Sample;
                OkIfNotNull(sample);
            }

            // Sampleからstringに、as演算子を用いて変換してみる。
            {
                object target = new Sample("sample");
                string str = target as string;
                OkIfNotNull(str);
            }

            // stringからSampleに、暗黙の型変換を用いて変換してみる。
            {
                string target = "sample";
                Sample sample = target;
                OkIfNotNull(sample);
            }

            // Sampleからstringに、キャスト演算子を用いて変換してみる。
            {
                Sample target = new Sample("sample");
                string str = (string)target;
                OkIfNotNull(str);
            }
        }
    }
}
```

なので、当該部分を修正するかどうかは、判断が分かれるでしょう(Open棟梁の方針に従うべき)。
そういう「キャストを試みる箇所」は他にもたくさん存在するため、まずは

```csharp
public static TResult Cast<TResult>(Control target, string prefix)
    where TResult : Control
{
    try
    {
        return (TResult)target;
    }
    catch (Exception ex)
    {
        throw new FrameworkException(
            FrameworkExceptionMessage.CONTROL_TYPE_ERROR[0],
            String.Format(FrameworkExceptionMessage.CONTROL_TYPE_ERROR[1], prefix, target.GetType().ToString()), ex);
    }
}
```

みたいなヘルパメソッドとして切り出すのが先じゃないでしょうか。