2012-04-10 7 views
0

Ich habe eine Leinwand in einem itemControl und für die Datenvorlage verwende ich Ellipsen. Die Position jeder Ellipse repräsentiert eine Tageszeit von 6 bis 23 Uhr. Ich binde diesen Wert basierend auf der Größe der Arbeitsfläche und der Zeit, die der Ellipse zugewiesen wird. Das Ellipsenoberteil bewegt sich überhaupt nicht in der Leinwand. Ich habe versucht, die Bindung zu entfernen und einen harten Wert zu verwenden, und es ist immer noch an der gleichen Stelle.Canvas.Top nicht rendern

Hier ist die XAML für den Container

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

Hier ist der Konverter, die ich glaube nicht, das Problem gegeben, dass es zu entfernen

Beliebig
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(); 
    } 
} 

nicht die Position der Ellipse bewegen Hilfe würde geschätzt werden

+0

Eine Sache, die ich sofort bin zu bemerken ist, dass Sie 'Canvas.Top = "Canvas.Top ="{Binding' haben. Ich denke, das sollte nur 'Canvas.Top =" {Binding "sein. – oltman

+0

Ich habe diesen Bug behoben und er macht immer noch das Gleiche. Ich habe versucht, auf eine fest codierte Nummer umzuschalten und das funktioniert immer noch nicht. – joshwl2003

Antwort

0

Hat das Canvas-Steuerelement eine Höhe festgelegt?

Können Sie einen Breakpoint auf die erste Zeile für Convert-Methode in Converter setzen, nur um zu überprüfen, ob es aufgerufen wird?

... Versuchen Sie stattdessen:

<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

Die Konvertierung Methode wird immer aufgerufen und korrekt berechnet. Ich habe versucht, die Höhe der Leinwand und dann die Ellipse Position auf einen Wert und es immer noch an der exakt gleichen Stelle angezeigt. :( – joshwl2003

+0

Ok, ich habe eine Lösung für Sie gefunden :) Anstelle der Verwendung von Itemspaneltemplate wickeln Items mit Leinwand, so ähnlich: ....

+0

Thank Sie! Ich habe versucht herauszufinden, warum das 3 Tage lang nicht funktionierte! :) – joshwl2003