Mein versuch sieht so aus:
<!--Testbeispiel Plaenten-->
<ItemsControl Name="canvasPlaneten" ItemsSource="{Binding Path=ItemsPlanetes}"
Width="400" Height="200" Background="LightBlue">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left">
<Setter.Value>
<MultiBinding Converter="{StaticResource posRaConverter}">
<Binding Path="Ra"/>
<Binding ElementName="canvasPlaneten" Path="ActualWidth"/>
<Binding ElementName="canvasPlaneten" Path="ActualHeight"/>
<Binding Path="Radius"/>
</MultiBinding>
</Setter.Value>
</Setter>
<Setter Property="Canvas.Top">
<Setter.Value>
<MultiBinding Converter="{StaticResource posDecConverter}">
<Binding Path="Dec"/>
<Binding ElementName="canvasPlaneten" Path="ActualWidth"/>
<Binding ElementName="canvasPlaneten" Path="ActualHeight"/>
<Binding Path="Radius"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Ellipse Height="{Binding Radius}" Width="{Binding Radius}" Fill="{Binding Color}" Stroke="{Binding Color}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Also MultiValueConverter für die Berechnung der Position im Canvas habe ich folgende Klasse gebildet (Beispiel Rektaszension):
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double _height100 = 845;
double _width100 = 1620;
double ra = System.Convert.ToDouble(values[0]);
double width = System.Convert.ToDouble(values[1]);
double height = System.Convert.ToDouble(values[2]);
double radius = System.Convert.ToDouble(values[3]);
double faktorHeight = height / _height100;
double faktorWidth = width / _width100;
double faktor = faktorHeight < faktorWidth ? faktorHeight : faktorWidth;
return (width / 24.0 * (24.0 - ra) - (radius * faktor));
}
Läuft eigentlich erstaunlich gut, so wie MrSparkle vorausgesagt hat.
Was ich nun aber nicht hinkriege ist die aktuelle Grösse der Canvas-Fläche zu meinem Converter zu bringen.
Deshlab nun meine Fragem:
a) Woher nehme ich die aktuelle Grösse der Zeichenfläche;
b) Ist dieser erste Ansatz für eine dynamische MMVM-Canvas-Darstellung richtig?
Danke für eure Hilfe!