1

Control Ctrlasを取り、それを変更する関数をコーディングしてArguementControl.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)

a にはContentControl常に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 に答える