1

我正在编写一个函数,它将采用Control CtrlasArguement并修改Control.Content它。有没有办法获取和设置Content任何Control

代码 :

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'
    }
}
4

3 回答 3

2

您可以将方法的签名更改为:

void RemoveHotKey(ContentControl Ctrl, int KeyIndex)

aContentControl总是有一个Content属性。

于 2012-05-22T08:27:52.800 回答
2

试试这个:

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

看看这里

或这个:

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

这比使用反射便宜得多。

于 2012-05-22T08:28:32.380 回答
1

您可以使用反射来检查Control实际上是否具有Content属性...

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);
}
于 2012-05-22T08:26:19.290 回答