2012-04-10 58 views
0

我有一个画布在itemControl和我使用省略号数据模板。每个椭圆的位置表示一天中早上6点至晚上11点的时间。我根据画布的大小和分配给椭圆的时间落在哪里来绑定该值。 ellispse顶部并没有在画布中移动。我试图删除绑定并使用硬性值,它仍然在同一个地方。了Canvas.Top不渲染

这里是容器

 <ItemsControl Grid.Column="1" ItemsSource="{Binding AngerData}" VerticalAlignment="Stretch" Canvas.ZIndex="1"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <Canvas VerticalAlignment="Stretch"></Canvas> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Ellipse Height="10" Width="10" Stroke="White" StrokeThickness="1" 
          Canvas.Top="{Binding Top, Converter={StaticResource ResourceKey=ellipsePositionConverter}, ConverterParameter=Month}" >" 
          Fill="{Binding AngerRating, Converter={StaticResource angerRatingConverter}}" 
          Canvas.ZIndex="100"> 
        </Ellipse> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 

在这里,XAML是我不认为转换器是因为删除它不动椭圆

public class CalendarDayEllipsePositionConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     double gridPosition = 0; 

     if (parameter.ToString().Equals("Month", StringComparison.InvariantCultureIgnoreCase)) 
     { 
      gridPosition = double.Parse(value.ToString()) * 110; 
     } 

     return gridPosition; 
    } 

    public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

任何位置的问题帮助将不胜感激

+0

有一件事我马上注意到的是,你有'Canvas.Top = “Canvas.Top =”{Binding'。我认为这应该只是'Canvas.Top =“{Binding'。 – oltman 2012-04-10 21:49:38

+0

我修正了这个错误,它仍然在做同样的事情我已经尝试切换回硬编码的号码,这仍然不起作用 – joshwl2003 2012-04-11 22:10:43

回答

0

是否Canvas控件的高度设置?

你可以把在转换器,转换方法的第一行设置一个断点只是为了检查它是否叫什么名字?

...试试这个:

<Canvas VerticalAlignment="Stretch"> 
      <ItemsControl Grid.Column="1" 
         VerticalAlignment="Stretch" 
         Canvas.ZIndex="1" 
         ItemsSource="{Binding AngerData}"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Ellipse Canvas.Top="{Binding 
                Converter={StaticResource ResourceKey=ellipsePositionConverter}, 
                ConverterParameter=Month}" 
          Width="10" 
          Height="10" 
          Canvas.ZIndex="100" 
          Fill="Red" 
          Stroke="White" 
          StrokeThickness="1" /> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 

      </ItemsControl> 
     </Canvas> 
+0

转换方法总是被调用和计算正确,我试着设置画布的高度,然后将椭圆位置设置为一个值,它仍然显示在完全相同的位置::( – joshwl2003 2012-04-11 22:11:55

+0

好吧,我找到了一个解决方案:) 代替使用ItemsPanelTemplate包裹的ItemsControl与帆布,类似的东西的: <帆布VerticalAlignment = “拉伸”> .... 2012-04-12 06:16:15

+0

谢谢您!我一直在试图弄清楚为什么这不能工作3天! :) – joshwl2003 2012-04-12 12:58:08