2

私のSiverlight4アプリケーションでまさにこの問題が発生しています:

説明 データグリッドがハイパーリンク (RichTextBox の一部) にフォーカスを失うと、エラーが発生します。

例外の詳細は次のとおりです。

{
System.InvalidOperationException: Reference is not a valid visual DependencyObject.
at System.Windows.Media.VisualTreeHelper.GetRelative(DependencyObject reference, RelativeKind relativeKind)
at System.Windows.Media.VisualTreeHelper.GetParent(DependencyObject reference)
at System.Windows.Controls.DataGrid.DataGrid_LostFocus(Object sender, RoutedEventArgs e)
at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)
}

このエラーを再現するには、いくつかのデータを含む DataGrid と、少なくとも 1 つのハイパーリンクを含む RichTextBox を配置します。RichTextBox には IsReadOnly="True" が必要であり、実行時にデータグリッドにフォーカスを置いてハイパーリンクをクリックします。

このバグは、ファイル DataGrid.xaml.cs の 4782 行目にあります。

から: http://silverlight.codeplex.com/workitem/7696

回避策は、Silverlight DLL を編集することであると思われますが、私はそうしたくありません。

編集:どこかをクリックすると、この例外がスローされるようです。

この問題を回避する方法はありますか?

4

2 に答える 2

0

現在、回避策を考え出しています。

FlowDocument の XALM 文字列にバインドしているため、RichtTextBox をバインドする新しいプロパティをモデルに追加しました。そのプロパティでは、ハイパーリンク情報を手動で削除し、BOLD タグに置き換えています。

public string BodyXamlWithOutHyperLink
        {
            get
            {
                const string RegExPattern1 = @"<Hyperlink \S*"">";
                const string RegExPattern2 = @"</Hyperlink>";

                string body = this.BodyXaml;

                if (string.IsNullOrEmpty(body))
                {
                    return string.Empty;
                }

                Regex bodyRegEx = new Regex(RegExPattern1);
                body = bodyRegEx.Replace(body, "<Bold>");
                bodylRegEx = new Regex(RegExPattern2);
                body= bodyRegEx.Replace(mail, "</Bold>");

                return body;
            }

            set
            {
               // can be ignored, we are read-only anyway
            }
        }
于 2011-05-07T12:33:30.737 に答える
0

RichTextBox を読み取り専用にする必要があるのはなぜですか? 読み取り専用でない場合はどうなりますか?

これが datdgrid の既知のバグである場合、if-it-looks-right-it-is-right ソリューションをハッキングすることを検討します (これは dll の変更/修正よりも優れていると思います)。

例、それはハイパーリンクでなければなりませんか? 代わりにテキストブロックにすることはできますか (コードでハイパーリンク部分を処理します)。

于 2011-05-06T23:38:31.950 に答える