2014-05-19 70 views
0

如何检查WPF控件是否具有内容变量?WPF获取所有控件“内容”

我迭代通过所有使用此代码的控件:

public void Translate(Visual myVisual) 
{ 
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++) 
    { 
     // Retrieve child visual at specified index value. 
     Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i); 

     //How can I check wether childVisual has a Content-Variable or hasn't? 
     //So check if this: childVisual.Content is existing 

     // Enumerate children of the child visual object. 
     Translate(childVisual); 
    } 
} 

你propably coud做每一个控制型如下:

if(visualChild is CheckBox) 
    //cast it to CheckBox etc. 

但是,这是肮脏的,没有任何其他可能性?

回答

0

最简单的方法是检查您的Visual是否为ContentControl。通常,具有Content属性的所有WPF控件都从ContentControl派生。

for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++) 
{ 
    // Retrieve child visual at specified index value. 
    Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i); 

    //How can I check whether childVisual has a Content-Variable or hasn't? 
    var childContentVisual = childVisual as ContentControl; 
    if(childContentVisual != null) 
    { 
     var content = childContentVisual.Content; 
     ... 
    } 

    // Enumerate children of the child visual object. 
    Translate(childVisual); 
} 

您也可以使用反射来查看Content属性是否存在,但这样会更慢,更麻烦。

+0

谢谢!不知道这个类是否存在。解决了 –