Bonjour la zone,
je me remets tripoter WPF et j’avais quelques questions sur le sujet :
- Tout d’abord il y a manifestement quelquechose que je n’ai pas saisi avec le binding :
j’ai un objet avec une liste de “points”. J’aimerai bien les “dessiner” dans un layout mais allons-y par étape. Tout d’abord je voulais binder une listbox sur la collection de mon objet. J’ai procédé comme suit :
<ListBox ItemsSource="{Binding Path=Shapes}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="X : "/>
<TextBlock Text="{Binding Path=X}" />
<TextBlock Text=", Y : "/>
<TextBlock Text="{Binding Path=Y}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
là j’obtiens bien ce que je veux, c’est à dire :
Je veux ajouter également une listbox avec la même liste de points mais, convertis (via un converter) et là, ça pose problème :
voilà le converter :
[code] public class CoordinateConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
MyPoint myPoint = (myPoint)value;
Point p = new Point(System.Convert.ToDouble(myPoint.X), System.Convert.ToDouble(myPoint.Y));
// Matrice en dur, pour tests
Matrix m = new Matrix(0.0004185596, 0, 0, -0.000418559619, -2.35983944, 1148.95776);
MatrixTransform mt = new MatrixTransform(m);
return mt.Transform(p);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}[/code]
Là ça fonctionne toujours avec ce code :
<ListBox Name="listBox1" ItemsSource="{Binding Path=Shapes}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource myConverter}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
j’obtiens :
Par contre si je veux faire un formattage comme ma première liste (X : val , Y : val) je fais ça
<ListBox ItemsSource="{Binding Path=Shapes}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="X : "/>
<TextBlock Text="{Binding Path=X, Converter={StaticResource myConverter}}" />
<TextBlock Text=", Y : "/>
<TextBlock Text="{Binding Path=Y, Converter={StaticResource myConverter}}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Mais là ça ne fonctionne pas car ce n’est plus un MyPoint qui est passé à mon Converter mais un double (à cause du Path=X j’imagine) et forcément il lève une exception !
Mon deuxième souçi (et non des moindre) c’est que je voudrai restituer mes points sur un layout de façon “dynamique”.
Je m’explique : Je souhaiterai générer une matrix transform en fonction de la largeur et de la hauteur du layout dans lequel je souhaite afficher mes points (j’espère être clair).
Mais quand j’essaie d’obtenir la hauteur et la largeur du layout conteneur, j’obtiens un NaN… Donc je suppose qu’il faut remonter mon arbre pour trouver un conteneur qui contient une largeur et une hauteur non ? et la question est : Comment faire ?
Merci