首页 新闻 会员 周边

WPF调用动态控件,出现错误:System.NullReferenceException”

0
悬赏园豆:20 [已解决问题] 解决于 2012-11-20 16:33

.xaml文件代码:

<window>

<window.resources>

<DataTemplate x:Key="backTemplate">
            <Border BorderBrush="#55FFFFFF" Background="AliceBlue" BorderThickness="1" CornerRadius="5">
                <GroupBox Name="mapgroup"  Header="WPFMAP" Margin="12,27,241,12" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
                    <Grid>
                        <my:GMapControl Name="MainMap"/>
                    </Grid>
                </GroupBox>
            </Border>
        </DataTemplate>

</window.resources>

  <Border Name="border">
         <略写>
    </Border>

</window>

.cs文件代码:     private void Convertmap_Click(object sender, RoutedEventArgs e)
        {
           
            ((GMapControl)border.FindName("MainMap")).Manager.Mode = AccessMode.ServerAndCache;
            ((GMapControl)border.FindName("MainMap")).DragButton = MouseButton.Left;//鼠标左击拖动地图
            ((GMapControl)border.FindName("MainMap")).MapProvider = GMapProviders.BingMap;
            ((GMapControl)border.FindName("MainMap")).Position = new PointLatLng(32.5149000, 118.78361500);
            ((GMapControl)border.FindName("MainMap")).MaxZoom = 24;
            ((GMapControl)border.FindName("MainMap")).MinZoom = 1;
            ((GMapControl)border.FindName("MainMap")).Zoom = 4;
        }

这样写动态引用控件,哪里出问题了,怎么改???

蚂蚁大侠的主页 蚂蚁大侠 | 初学一级 | 园豆:115
提问于:2012-10-17 11:16
< >
分享
最佳答案
0

之前我也遇到过类似的问题,在WPF的书籍中有介绍说在Template中的名称只是在Template内有效,在外面无效,但是可以通过FindName来找到对应的元素,但是遇到和你相同的问题。于是就采用了另外一种方法,通过VisualTreeHelper来做可以实现的。

收获园豆:20
yangtam | 菜鸟二级 |园豆:369 | 2012-10-17 23:33

谢谢你的指点,按照你的建议,我想得到gmapcotrol的name为MainMap控件,使用visualtreehelper的语句是哪句?本人刚刚学习wpf,请你多多指点,再次谢谢!

蚂蚁大侠 | 园豆:115 (初学一级) | 2012-10-18 10:27

@永乐上铺: 

private void Button_Click(object sender, RoutedEventArgs e)
        {
            var s = sender as Button;
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(s); i++)
            {
                Debug.WriteLine(VisualTreeHelper.GetChild(s, i).ToString());
                if(VisualTreeHelper.GetChild(s, i) != DependencyProperty.UnsetValue)
                {
                    for (int j = 0; j < VisualTreeHelper.GetChildrenCount(VisualTreeHelper.GetChild(s, i)); j++)
                    {
                        Debug.WriteLine(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(s, i), j).ToString());
                    }
                }
            }
        }
yangtam | 园豆:369 (菜鸟二级) | 2012-10-23 14:08
其他回答(1)
0

因为在你调用的时候还没有加载

田林九村 | 园豆:2367 (老鸟四级) | 2012-10-17 11:52

恩,是的,但是怎么加载???谢谢

支持(0) 反对(0) 蚂蚁大侠 | 园豆:115 (初学一级) | 2012-10-17 11:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册