0

ここに画像の説明を入力してください

テキストボックス、テキストブロック、コンボボックス、ボタンなど、さまざまな種類のコントロールを備えたWPFフォームがあります。次の情報を表示できるように、C#を使用してこれらの各コントロールにツールチップを動的に追加する必要があります。

  1. XとYの位置
  2. TabIndex。

以下のように各コントロールに対して以下のコードを実行します(今のところテキストボックスのコード):

 foreach (Control ctrl in grd.Children)
        {
            if (ctrl.GetType().ToString() == "System.Controls.TextBox")
            {
                tbox = ctrl as TextBox;
                Point p = Mouse.GetPosition(tbox);
                tbox.ToolTip =p.X + " " + p.Y + " \n " + tbox.TabIndex ;
            }
        }

しかし、これは機能していません。何かご意見は?

4

4 に答える 4

6

まず第一に、あなたのタイプチェックは単なる悪です。

 if (ctrl.GetType().ToString() == "System.Controls.TextBox")

に変更します

 if (ctrl is TextBox)

またはさらに良い

var textbox = ctrl as TextBox;
if(textbox != null)

wpfではTextBoxがSystem.Windows.Controls名前空間にあることに注意してください。

ループは、他のコンテナ、グループが制御するテンプレート、ツリーをトラバースする必要がある場合にのみ、ビジュアルツリーの最初のレベルをチェックします。それを行う方法については、これを参照してください。

于 2012-07-24T10:19:41.163 に答える
2
try with this code

var controls = grd.Children.OfType<TextBox>();

foreach(var control in controls)
{
   Point point = Mouse.GetPosition(control);
   control.ToolTip = point.X + " " + point.Y + " \n " + control.TabIndex ;
}
于 2012-07-24T10:19:15.273 に答える
0

MVVMを実行するとします。

次に、おそらくViewModelクラスがあります。そのクラスでは、コントロールを定義する場所だけで、各コントロールの動的文字列を定義できます。

XAMLでは、ツールチップを定義するだけです。

<Button Content="Submit">
    <Button.ToolTip>
        <ToolTip>
            <StackPanel>
                <TextBlock FontWeight="Bold">Submit Request</TextBlock>
                <TextBlock>Submits the request to the server.</TextBlock>
            </StackPanel>
        </ToolTip>
    </Button.ToolTip>
</Button>

テキストブロックテキストはViewModelで配信でき、BindingはそれらをViewに取得します。

あなたのViewModelは、あなたのコントロールがどのタブにあるかも知っていると思います。

ツールチップの詳細については、WPFTutorialsサイトのツールチップコントロールに関するWPFチュートリアルがあります。

MVVMの詳細については、ここに簡単なチュートリアルがあります:MVVMのMSDN

于 2012-07-24T10:19:20.913 に答える
0

Your type checking is wrong (namespace!). Try this:

foreach (var ctrl in grd.Children)
        {
            if (ctrl is TextBox)
            {
                tbox = ctrl as TextBox;
                Point p = Mouse.GetPosition(tbox);
                tbox.ToolTip =p.X + " " + p.Y + " \n " + tbox.TabIndex ;
            }
        }
于 2012-07-24T10:23:23.877 に答える