我有一个线段列表,每个线段包含一个点列表。由于包含在同一个画布上,我想显示每个线段并同时标记每个点位置(即带有椭圆)。我可以使用ItemsControl来显示段,但我仍然坚持如何显示点。我开始实现从Shape派生的自定义控件,但必须有一个更简单的方法。在此先感谢您的帮助。
public class VesselAnatomy : IEnumerable, INotifyCollectionChanged
{
...
List<BaseVessel> _Segments;
...
}
public class BaseVessel : INotifyPropertyChanged
{
...
ObservableCollection<Point> _VesselPoints;
public ObservableCollection<Point> VesselPoints
{
get
{
return _VesselPoints;
}
}
...
}
public MainWindow()
{
...
VesselAnatomy Vessels = new VesselAnatomy();
...
MasterContainer.DataContext = Vessels;
...
}
<ItemsControl x:Name="VesselDisplay"
Height="750"
Width="750"
ItemsSource="{Binding}">
<Polyline Points="{Binding VesselPoints, Converter={StaticResource ObsListPointConverter}}"
Stroke="Red"
StrokeThickness="7">
<Polyline.ToolTip>
<ToolTip>
<TextBlock Text="{Binding Name}"/>
</ToolTip>
</Polyline.ToolTip>
</Polyline>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 0 :(得分:0)
您可以使用ItemsControl作为点,也可以更改ItemsPanel并绑定元素位置。
<Window ... >
<Window.Resources>
<PointCollection x:Key="points">
<Point X="20" Y="20" />
<Point X="40" Y="35" />
<Point X="60" Y="40" />
<Point X="80" Y="60" />
<Point X="100" Y="40" />
<Point X="120" Y="30" />
<Point X="140" Y="40" />
<Point X="160" Y="20" />
</PointCollection>
<DataTemplate DataType="{x:Type Point}">
<Ellipse Width="9" Height="9" Fill="White" Stroke="DodgerBlue" StrokeThickness="1" x:Name="e">
<Ellipse.RenderTransform>
<TransformGroup>
<TranslateTransform X="-4" Y="-4" />
<TranslateTransform X="{Binding X}" Y="{Binding Y}" />
</TransformGroup>
</Ellipse.RenderTransform>
</Ellipse>
</DataTemplate>
</Window.Resources>
<Grid>
<Polyline x:Name="line" Stroke="LightBlue" StrokeThickness="2" Points="{StaticResource points}" />
<ItemsControl x:Name="ptsdisplay" ItemsSource="{StaticResource points}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</Window>
如果你有很多分数且这个方法太慢,请尝试http://msdn.microsoft.com/en-us/magazine/dd483292.aspx