2012-05-22 19 views
1

我正在编写一个函数,它将采用Control Ctrl作为Arguement并修改它的Control.Content。 是否有任何方法获取并设置Content任何Control ??如何获取WPF中任何控件的“内容”?

代码:

void RemoveHotKey(Control Ctrl, int KeyIndex) 
{ 
    if (Ctrl.Content.ToString().Substring(KeyIndex, 1) == "_") // System.Windows.Controls.Control does not contain a definition for 'Content' 
    { 
     Ctrl.Content = Ctrl.Content.ToString().Remove(KeyIndex, 1); // System.Windows.Controls.Control does not contain a definition for 'Content' 
    } 
} 
+0

你为什么要使用控制类的说法,而不是ContentControl中类参数? – mtijn

回答

2

试试这个:

void RemoveHotKey(ContentControl Ctrl, int KeyIndex) 
{ 
    if (Ctrl.Content.ToString().Substring(KeyIndex, 1) == "_") 
    { 
     Ctrl.Content = Ctrl.Content.ToString().Remove(KeyIndex, 1); 
    } 
} 

看看here

或本:

void RemoveHotKey(Control Ctrl, int KeyIndex) 
{ 
    ContentControl contentCtrl = Ctrl as ContentControl; 
    if (contentCtrl != null && contentCtrl.Content != null) 
    { 
     if (contentCtrl.Content.ToString().Substring(KeyIndex, 1) == "_") 
     { 
      contentCtrl.Content = contentCtrl.Content.ToString().Remove(KeyIndex, 1); 
     } 
    } 
} 

这比使用反射方式更便宜..

+1

+1对于一个非常好的答案与例子![Selected] – Writwick

1

你可以使用反射来检查其实是否控制有内容财产......

Type t = Ctrl.GetType(); 
PropertyInfo p = t.GetProperty("Content"); 
if (p != null) 
{ 
    string val = p.GetValue(Ctrl, null) ?? ""; 
    val = val.Replace("_", ""); 
    p.SetValue(Ctrl, val, null); 
} 
2

你可以在你的方法的签名更改为这个:

void RemoveHotKey(ContentControl Ctrl, int KeyIndex) 

a ContentControl始终有一个Content属性。

+2

+1非常好,最快的正确答案! – Writwick

相关问题