2009-09-06 77 views
2

我非常困惑的MSDN示例。我发现的所有示例通常围绕StackPanel中的文本项目或类似的简单东西。如何创建一个ItemsControl,将每个“item”呈现为PolyLine上的一个点?

鉴于数字数组作为的ItemsSource -

ItemsSource = { 25 , 50 , 75 } 

ItemsControl的应procuce仅此:

<PolyLine Points="0,25 1,50 2,75" /> 

如图所示,每一个项目需要被翻译成一个点 - 其中“ x“值是项目在项目列表中的位置,'y'值是项目本身的解释数值。

如果一个ItemsPanelTemplate是绝对需要的,我想它会对单个PolyLine的布局产生最小的影响 - 一个简单的Grid,可能没有任何明确的列或行定义。

但我不知道如何实现ItemsPanelTemplate OR ItemsPresenter OR的ItemTemplate在这种情况下。

任何人都可以指向正确的方向吗?

回答

0

你问的是可能的,但不是非常简单... Bea Stollnitz写道a series of articles关于将Polygon的点集合绑定到数据源,你可能会从中得到一些想法。

0

我的猜测是,您正在尝试创建显示折线图的控件。你可以看看WPF Toolkit charting controls,特别是LineSeries课。源代码可供下载,您可以通过查看它了解如何创建WPF控件。但是,这种方法并不像简单地将一组数字绑定到PolyLine那样简单。

+0

猜对了,哈哈。其实,我更感兴趣的是学习如何让WPF模板为我工作。但我的确在制作一个简单的折线图作为学习过程的一部分。 – Giffyguy 2009-09-06 23:18:11

0

这里是转换器用于将数据转换为位置的样品

<ItemsControl 
    x:Name="ic"> 
    <ItemsControl.Resources> 
     <local:DatumToPositionConverter x:Key="datumToPositionConverter" /> 
    </ItemsControl.Resources> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Ellipse 
        Width="2" 
        Height="2" 
        Fill="Red" 
        Margin="{Binding Converter={StaticResource datumToPositionConverter}}" 
        /> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    double d; 
    if (double.TryParse(value.ToString(), out d)) 
     return new Thickness(0, 0, 0, d); 
    else 
     return new Thickness(); 
} 
+1

这不回答我的问题。我试图将Item值绑定到PolyLine上相应点的Y值。我不只是试图在屏幕上操纵控件的位置。 – Giffyguy 2009-09-11 18:00:44

相关问题