我正在尝试在列表框中显示多个地图。
<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,但结果相同。
答案 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
将自动应用于集合中的数据对象。