2012-07-24 56 views
0

enter image description here如何以編程方式將工具提示添加到窗體中的所有控件 - WPF,C#?

我有不同類型,如文本框,的TextBlocks,組合框,按鈕等我需要工具提示添加到每個這些控制的控制的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 ; 
      } 
     } 

但是,這是行不通的。有什麼想法嗎?

+0

你能更具體地說明什麼是不工作?工具提示根本沒有被添加或者有錯誤的數據?你的代碼是否被執行? – 2012-07-24 10:15:50

+0

除了給出的答案,特別是Rafals,考慮使用DataTemplate和Databinding,因爲我很確定你想更新工具提示。而你目前使用的方式是「勝利形式」的方式,這是不適合wpf。至少有更好的選擇。 Google DataBinding,DataTemplate,INotifyPropertyChanged。 – dowhilefor 2012-07-24 10:21:39

回答

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 ; 
} 
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> 

TextBlock的文本可以在您的視圖模型 交付並綁定將讓他們到您的視圖。

我想你的ViewModel也知道你的控件在哪個Tab上。

有關工具提示的詳細信息,有WPFTutorials網站WPF Tutorial on Tooltip Controls

有關MVVM的更多信息,有一個快速的教程在這裏:MSDN on MVVM所有類型檢查的

+0

索尼特意要求鼠標位置和標籤索引工具提示。這個答案根本沒有幫助。 – 2012-07-24 10:21:56

+0

這是WPF的方式來做到這一點。看看評論。 – 2012-07-24 10:28:40

+0

再一次:你沒有回答他**的實際**問題。他希望在工具提示中包含控件位置和製表索引。這就是他要求的。 – 2012-07-24 10:34:03

6

首先是隻是普通的邪惡。

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

將其更改爲

if (ctrl is TextBox) 

甚至更​​好

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

注意,在WPF文本框是System.Windows.Controls命名空間。

您的循環將只檢查Visual Tree中的第一級,如果您想要其他容器,模板任何組合控件然後您必須遍歷樹。請參閱this瞭解如何操作。

0

您的類型檢查是錯誤的(命名空間!)。試試這個:

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 ; 
      } 
     } 
相關問題