列表框中的地图控件

时间:2015-12-01 08:03:04

标签: wpf

我正在尝试在列表框中显示多个地图。

        <Grid Name="MainGrid">
            <ScrollViewer  HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Visible" >
                <WrapPanel Name="wrap" >
                    <ListBox ItemsSource="{Binding MyList}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel>
                                <Border Margin="5" MinWidth="500" MinHeight="400" BorderThickness="2" BorderBrush="Black"
                                  Width="200" 
                                  Height="200" >
                                    <esri:MapView  MouseDown="MapView_MouseDown" MouseUp="MapView_MouseUp"  >
                                        <esri:Map   >
                                            <esri:ArcGISTiledMapServiceLayer ID="BaseMap" ServiceUri="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/>
                                        </esri:Map>
                                    </esri:MapView>
                                </Border>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </WrapPanel>
            </ScrollViewer>
        </Grid>

地图未显示。仅显示徽标“esri”。但是,如果我删除列表框,它可以正常工作。可能是什么问题?

我非常确定我的列表框中有项目,否则“esri”就不会出现。 我也尝试了Itemscontrol,但结果相同。

1 个答案:

答案 0 :(得分:0)

在WPF中,我们不会将UI元素放入集合中,而是将数据对象放入集合中。每个数据项应包含数据绑定到您实际要显示的UI控件所需的任何属性。因此,您的MyList集合应包含一组数据对象。

创建自定义类以包含这些必需属性后,您需要声明一个DataTemplate来定义要显示的UI元素。 (有关详细信息,请参阅MSDN上的Data Templating Overview页面。)

<ControlTemplate x:Key="YourCustomControlTemplate">
    <!-- Define your UI content here -->
</ControlTemplate>

为自定义数据类声明自定义ControlTemplate后,应将其放入数据对象的Style中:

<Style TargetType="{x:Type YourXamlPrefix:YourCustomDataClass}">
    <Setter Property="Template" Value="{StaticResource YourCustomControlTemplate}" />
</Style>

请注意,我已在此x:Key上省略了Style指令...您可以添加一个,但没有一个(只要这个Style }已在UI的范围内声明,Style将自动应用于集合中的数据对象。