[WPF] Fenêtre Transparente et Taille

Bonjour à tous,

j’ai un petit souci concernant une appli avec fenêtre transparente. Voici la déclaration de ma fenêtre :

<Window x:Class="WpfApplication4.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" WindowStyle="None" ResizeMode="NoResize" AllowsTransparency="True" Background="Transparent" Width="Auto" SizeToContent="WidthAndHeight" Top="0" Height="Auto" >

Ma fenêtre est bien transparente et la taille de la fenêtre correspond bien à la taille de son contenu (voir screen1.gif)

Le souci c’est que lorsque je clique sur sur un élément de la listbox, dessous doit apparaître une autre listbox dans un canvas, mais elle n’apparait pas car la taille de la fenêtre transparente ne change pas. Si je spécifie une taille à mon canvas, alors là il apparait bien (la taille de la fenêtre s’adapte) (voir screen2.gif) :

<Canvas Height="500" Background="Transparent" DockPanel.Dock="Top"> <ListBox ItemsSource="{Binding Source={StaticResource EpisodesSource}, Path=Actors}" ItemTemplate="{StaticResource ActorDataTemplate}"/> </Canvas>

Mais évidemment moi ça ne m’intéresse absolument pas de spécifier la taille.

Je voudrais donc savoir quel est le contournement pour que la taille de la fenêtre s’adapte à son contenu même lorsque celui-ci change ???
Merci !!

PS : ci joint le code :
http://cid-9d12ef397cb411bf.skydrive.live…pplication4.zip

Il suffit de ne pas mettre ta ListBox dans un Canvas. Un canvas ne s’adapte jamais a la taille de son contenu (regarde la doc sur les gestionnaires de layout sur la msdn)

Ok je vais regarder ça. En fait je voulais utiliser un Canvas pour pouvoir aligner la 2è listbox sur le listboxitem correspondant de la 1ère.

Merci ! :smiley:

[quote=« EzecKiel, post:3, topic: 50831 »]Ok je vais regarder ça. En fait je voulais utiliser un Canvas pour pouvoir aligner la 2è listbox sur le listboxitem correspondant de la 1ère.

Merci ! :D[/quote]

Au final j’ai supprimé le Canvas au profit d’un Stackpanel.
Ce que j’ai fait pour que la 2è liste s’affiche sous la première c’est ça :

sur le selectionchanged de la première listbox :

[code]private void list_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBox lb = sender as ListBox;

if (lb != null)
{
	ListBoxItem lbi = (ListBoxItem)(list.ItemContainerGenerator.ContainerFromItem(lb.SelectedItem));

	if (lbi != null)
	{
		Point p = lbi.TranslatePoint(new Point(0.0, 0.0), Window.GetWindow(lbi));
		ActorsList.Margin  = new Thickness() { Left = p.X };
	}
}

}[/code]

Ca semble fonctionner.