日期:2014-05-17  浏览次数:21159 次

WPF,获取窗体的所有Border元素

<Window x:Class="WPF熊俊.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WPF熊俊" ContentRendered="Window_ContentRendered">
    <Border Name="border1">
            <Button x:Name="button1" Content="Button" Click="Button_Click"/>
    </Border>
</Window>


private void Button_Click(object sender, RoutedEventArgs e)
{
    EnumVisual(this);
}
public void EnumVisual(DependencyObject dcy)
{
    int count = VisualTreeHelper.GetChildrenCount(dcy);
    for (int i = 0; i < count; i++)
    {
        DependencyObject childdcy = VisualTreeHelper.GetChild(dcy, i);
        Border border = childdcy as Border;
        if (border != null)
            MessageBox.Show(border.Name);
        EnumVisual(childdcy);
    }
}


代码查找窗体的所有Border元素,明明只有一个Border元素,怎么输出3个呢?

------解决方案--------------------
你打出来wpf预定义的控件(例如button)它自己的数据模板定义来看看。
------解决方案--------------------
它自己的数据模板定义  -->  它自己的控件模板定义
------解决方案--------------------
你的这段代码有两个border,你可以下载一个snoop或wpf inspector来观察visual tree,或者用blend编辑元素的模板,或者查msdn,都可以了解visual tree的内容和层次。

------解决方案--------------------
那请你下载snoop或wpf inspector后看下visual tree,把图片贴出来。