2012-04-10 4 views
0

У меня есть холст в itemControl и для шаблона данных я использую эллипсы. Положение каждого эллипса представляет собой время суток между 6:00 и 11:00. Я привязываю это значение, основанное на размере на холсте и где время, присвоенное эллипсу, падает. Верх эллипса вообще не перемещается на холсте. Я попытался удалить привязку и использовать жесткую ценность, и она все еще находится в одном месте.Canvas.Top not rendering

Вот XAML для контейнера

 <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> 

Вот конвертер, который я не думаю, что это вопрос, учитывая, что удаление его не перемещает положение эллипса

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

+0

Я исправил эту ошибку, и она по-прежнему делает то же самое. Я попытался вернуться к жесткому кодированному номеру, и это все еще не работает. – joshwl2003

ответ

0

Имеет ли элемент управления холста значение высоты?

Можете ли вы поставить точку останова в первой строке для преобразования метода в конвертер, чтобы проверить, вызвана ли она?

... Попробуйте вместо этого:

<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

+0

Хорошо, я нашел решение для вас :) Вместо использования ItemsPanelTemplate завернуть ItemsControl с Canvas, что-то вроде этого: ....

+0

Спасибо вы! Я пытался выяснить, почему это не работает в течение 3 дней! :) – joshwl2003