2

理解できない問題があります。

POSアプリケーションで使用される物理キーボードを表すWPFウィンドウがあります。各物理ボタンは、WPFボタンで表されます。ユーザーは、割り当てられている機能を変更するためのコントロールを備えた別のウィンドウを開くボタンをクリックします。ユーザーがボタンにカーソルを合わせると、現在割り当てられている機能を示すツールチップが表示されます。

新しい設定を設定したら、ツールチップを更新する必要があります。新しいツールチップは正しく表示されますが、古いツールチップは削除されません。を使用するButton.ToolTip = nullと、ツールのヒントがすべて消えます。を使用するButton.ToolTip = String.Emptyと、空白も表示されます。ボタンに機能が割り当てられていない場合、ツールチップを表示したくありません。

表示するものがない場合、ツールチップを削除/非アクティブ化するにはどうすればよいですか?

loadToolTips()は、親ウィンドウのWindow_Activatedイベント中に発生します。

コード:

private void loadToolTips()
        {
            JPOSDB db = new JPOSDB();
            SqlDataReader dr = default(SqlDataReader);
            StringBuilder tt = new StringBuilder();

            dr = db.getDR("SELECT KeyName, FunctionName, Parameter1, Parameter2 FROM KeyboardSettings JOIN KeyboardFunctions ON KeySetting = FunctionID WHERE KeyboardID = " + runTime.keyboardID);

            while (dr.Read())
            {
                foreach (Control ctrl in grdButtons.Children)
                {
                    if (ctrl.GetType() == typeof(Button))
                    {
                        Button button = new Button();
                        button = (Button)ctrl;
                        button.ToolTip = null;   <--- Causes all tool tips to disappear

                        if (button.Name.ToString() == dr[0].ToString())
                        {
                            tt.Clear();
                            tt.Append("Function: " + dr[1].ToString());

                            if (dr[2].ToString().Length > 0)
                            {
                                tt.Append(Environment.NewLine);
                                tt.Append("Value: " + dr[2].ToString());
                            }

                            if (dr[3].ToString().Length > 0)
                            {
                                tt.Append(Environment.NewLine);
                                tt.Append("Name: " + dr[3].ToString());
                            }

                            button.ToolTip = tt.ToString();                    
                        }
                    }
                }
            }

            dr.Close();
        }
4

2 に答える 2

3

ClearValueDepencency ToolTipProperty をクリアするために使用できます。これが役立つかどうかを確認してください。

 Button button = (Button)ctrl;
 button.ClearValue(Button.ToolTipProperty); 
于 2013-01-02T00:59:54.633 に答える
0

質問を理解できたかどうかわかりませんが、次の行を使用できます。

var s = tt.ToString();
button.ToolTip = string.IsNullOrEmpty(s) ? null : s;

これで質問の答えが得られない場合は、コメントを残してください。削除します。

于 2013-01-02T01:23:30.230 に答える