6

TabControla 、 a 、TextBoxおよび validationに問題がありToolTipます。

2 つの TabItems を持つ TabControl があるとします。最初の項目にはシンプルなTextBox. このプロパティは、およびを使用して、それ自体TextBox Textの文字列プロパティにバインドされます。そのプロパティのセッターは、何かが設定されるたびに例外をスローします。UserControlMode=TwoWayValidatesOnExceptions=TrueText

Resourcesセクションには、および検証UserControl用の新しい既定のスタイルが含まれています(ただし、これらのスタイルとテンプレートはMSDNから取得されます)。TextBoxToolTip

に何かを入力してTextBox、検証をToolTip表示させます。

ここに画像の説明を入力

次に、2 番目のタブに切り替えます。検証のツールチップはそのままです。

ここに画像の説明を入力

問題を示す Silverlight アプリケーションを含む VS ソリューションを作成しました。VS ソリューションの zip アーカイブは、こちらから入手できます。

誰かが同様の問題を抱えているか、その問題の解決策さえありますか?

免責事項: Silverlight 4 に関してStackOverflowに同様の質問があり、約 1 年半前から回答がありません。私はすでにその質問をsilverlight.netに投稿しましたが、数日間返信がありませんでした.

4

2 に答える 2

3

これは実装のバグだと思いますTabControl。アプリケーションでこれを修正するために、この動作を実装しました。

public class TabControlFixBehavior: Behavior<TabControl>
{
    protected override void OnAttached()
    {
        AssociatedObject.SelectionChanged += AssociatedObjectOnSelectionChanged;
        base.OnAttached();
    }

    protected override void OnDetaching()
    {
        AssociatedObject.SelectionChanged -= AssociatedObjectOnSelectionChanged;

        base.OnDetaching();
    }

    private void AssociatedObjectOnSelectionChanged(object sender, SelectionChangedEventArgs args)
    {
        if (args.RemovedItems.Count > 0)
        {
            var oldTabItem = args.RemovedItems[0] as TabItem;
            if (oldTabItem != null)
            {
                var popups = VisualTreeHelper.GetOpenPopups();
                foreach (var popup in popups)
                {
                    var toolTip = popup.Child as ToolTip;
                    if (toolTip != null)
                    {
                        if (VisualTreeHelper.GetRoot(toolTip.PlacementTarget) == oldTabItem.Content)
                        {
                            popup.IsOpen = false;
                        }
                    }
                }
            }
        }
    }
}
于 2012-09-07T11:57:25.823 に答える
0

検証ツールチップは、Silverlight 5 の暗黙的な機能です。「メイン ページ」ユーザー コントロールの「UserControl.Resources」ノードをクリアしてください。期待どおりの動作が得られます。

[編集] 質問の最後まで読んでいませんでした。申し訳ありません:)

于 2012-07-16T15:51:20.487 に答える