Blog du Pôle .NET

Partager pour mieux développer...

ListBox et SilverLight

clock mai 20, 2008 17:57 by author aequoy

Pour compléter le sujet de mon cher et tendre collègue YoView (La listbox WPF), je vais vous parler un tant soit peu de la listBox côté SilverLight.

Entre WPF et SilverLight nous retrouvons quasiment les mêmes possibilités de templétisation et de databinding des éléments.

Pour ma part, j'ai décidé de transformer le comportement normal d'une listbox en un caroussel de photo.

Qui a dit le culte du chef ? ;)

Un peu de XAML, illustrant le code de ma listBox

<ListBox x:Name="PersonList" ItemsSource="{Binding}" Style="{StaticResource PersonListStyle}" ItemContainerStyle="{StaticResource PersonItemStyle}" Width="975.672" Height="563.776" Padding="0" />

La listBox est liée à une liste d'objets Person contenant chacun une photo.

2 templates vont définir le style global de la liste ainsi que le style de chaque élément à l'intérieur.

1) Commençons par le plus simple, le template de la listBox:


<
Style x:Key="PersonListStyle" TargetType="ListBox" >
  <Setter
Property="Template">
    
<Setter.Value>
      <ControlTemplate TargetType="ListBox">
        
<Grid>
          <Border BorderBrush="transparent" BorderThickness="0" CornerRadius="3">
            <Border BorderBrush="transparent" BorderThickness="0" CornerRadius="2">
             <ItemsPresenter />
            </Border>
          </Border>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
2) Un peu plus complexe, le template des items de la liste (ListBoxItem):


<
Style x:Key="PersonItemStyle" x:Name="DEDE" TargetType="ListBoxItem">
  <Setter Property="Background" Value="Transparent" />
  <Setter Property="Template">
    <Setter.Value>
     <ControlTemplate TargetType="ListBoxItem">
      <Canvas x:Name="RootElement" Canvas.Top="{Binding CanvasTop}"
                                                                  Canvas.Left
="{Binding CanvasLeft}"
                                                                  Canvas.ZIndex
="{Binding CanvasZi}">
        <StackPanel x:Name="MonPanelPerson" Canvas.Top="{Binding CanvasTop}"
                                                                                 Canvas.Left
="{Binding CanvasLeft}"
                                                                                 Canvas.ZIndex
="{Binding CanvasZi}">
          <Border x:Name="BorderImgHaut" BorderBrush="Gray" BorderThickness="2"
                                                                         CornerRadius
="5" Background="Transparent"
                                                                         Cursor
="Hand">
            <Image x:Name="ImgHaut" Source="{Binding ImgSource}"
                                                             Width
="{Binding WidthA}"
                                                             Height
="{Binding HeightA}">
            </Image>
        </Border>
          <Border x:Name="BorderImgBas" BorderBrush="Gray"
                                                                          BorderThickness
="2"
                                                                          CornerRadius
="3"
                                                                          Background
="Transparent"
                                                                          RenderTransformOrigin
="0.5,0.45">
           <Border.RenderTransform>
             <TransformGroup>
            <ScaleTransform ScaleY="0.7"/>
            <SkewTransform/>
            <RotateTransform Angle="-180" />
            <TranslateTransform/>
            </TransformGroup>
           </Border.RenderTransform>
          <Image x:Name="ImgBas" Source="{Binding ImgSource}"
                                                            Width
="{Binding WidthA}"
                                                            Height
="{Binding HeightA}"
                                                            Opacity
="0.6" >
          </Image>
          <Border.OpacityMask>
           <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
           <GradientStop Offset=".8" Color="Black"/>
           <GradientStop Offset="0" Color="Transparent"/>
           </LinearGradientBrush>
           </Border.OpacityMask>
          </Border>
        </StackPanel>
      </Canvas>
     </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
Au delà de tout le code XAML très verbeux, il faut juste observer la capacité des contrôles SilverLight
et WPF en général à s'adapter au bon vouloir du développeur/graphiste

Un prochain billet présentera la logique derrière le caroussel.

Alexandre Equoy

Actuellement noté 5.0 par 1 personne(s)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Security Configuration Manager Powertoy for Windows Mobile

clock mai 20, 2008 16:15 by author friccelli

Lors de la tentative de connexion ou de déploiement de notre application, il arrive d'avoir ce message :

 

Comment génére-t-on ce certificat dont il a besoin?

Aprés moults recherches dans le msdn,j'ai bien essayé de modifier la base de registre de mon smartphone ...sans succés , sécurité quand tu nous tiens...!!

Et puis en persévérant , voici la solution :

 

Cet outil est fourni avec le  Windows Mobile  SDK, il se présente sous la forme d'un .msi qu'il suffit d'installer sur son poste.

Ensuite, il suffit de modifier la configuration de sécurité,de cliquer sur  et nous permet de pouvoir afin tester notre application sur un vrai smartphone (C'est quand même mieux que l'émulateur non ?).

Pour plus d'info : http://msdn.microsoft.com/en-us/library/bb158490.aspx

François RICCELLI

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Un contrôle Wonderful de WPF : la listbox

clock mai 20, 2008 15:48 by author yvue

Longtemps dénigré pour son look & feel très basique et austère, la listbox n'était utilisée qu'en dernier recours.
Maintenant, WPF (Windows Presentation Foundation) est passé par là et c'est la renaissance de ce contrôle.

La nouveauté principale des contrôles de WPF est la suivante : Un contrôle WPF fournit essentiellement un comportement.

C'est à dire : un bouton fournit une interface graphique permettant de "cliquer".
Dans notre cas, la listbox fournit une interface affichant un ensemble de données, parmi lesquelles, l'utilisateur peut réaliser une séléction

Par défaut, en glissant une listbox sur votre fenetre, vous retrouverez l'interface graphique classique :


Mais la force de WPF est de nous permettre de transformer complétement l'apparence de notre contrôle.
Ceci est permis par l'utilisation des styles et des templates de la listbox.

Par exemple, on peut transformer notre listbox en gridview :

Et oui, c'est bien une listbox !!! Comment le faire ... Tout simplement en spécifiant le comportement de ma listbox.


Spécification de la mise en forme des éléménts sous la forme d'un stackpanel 

<ItemsPanelTemplate x:Key="ItemsPanelTemplate1">
    
<StackPanel IsItemsHost="True" Margin="0,0,0,10"/>
</ItemsPanelTemplate>

Spécification de la représentation d'un élément dans la liste (Une grille contenant les textboxs, checkbox et combobox nécessaires à l'affichage des informations de mon objet)

<DataTemplate x:Key="DataTemplate1">
  
<Grid Width="{Binding ElementName=lstContacts, Path=ActualWidth}">
    
<Grid.ColumnDefinitions>
        
<ColumnDefinition SharedSizeGroup="Column_SSG_0"/>
        
<ColumnDefinition SharedSizeGroup="Column_SSG_1"/>
        
<ColumnDefinition SharedSizeGroup="Column_SSG_2"/>
        
<ColumnDefinition SharedSizeGroup="Column_SSG_3"/>
        
<ColumnDefinition SharedSizeGroup="Column_SSG_4"/>
        
<ColumnDefinition SharedSizeGroup="Column_SSG_5"/>
        
<ColumnDefinition SharedSizeGroup="Column_SSG_6"/>
        
<ColumnDefinition SharedSizeGroup="Column_SSG_7"/>
        
<ColumnDefinition SharedSizeGroup="Column_SSG_8"/>
    
</Grid.ColumnDefinitions>

    
<Border BorderBrush="Black" BorderThickness="1,1,0,0" Grid.Column="0">
         
<Label Content="&gt;" Margin="1" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" />
    
</Border>

     <Border BorderBrush="Black" BorderThickness="1,1,0,0" Grid.Column="1">
         
<TextBox Text="{Binding Path=Nom}" HorizontalAlignment="Stretch"/>
    
</Border>

     <Border BorderBrush="Black" BorderThickness="1,1,0,0" Grid.Column="2">
         
<TextBox Text="{Binding Path=Prenom}" HorizontalAlignment="Stretch"/>
    
</Border>

     <Border BorderBrush="Black" BorderThickness="1,1,0,0" Grid.Column="3">
         
<TextBox Text="{Binding Path=Age}" HorizontalAlignment="Stretch"/>
    
</Border>

     <Border BorderBrush="Black" BorderThickness="1,1,0,0" Grid.Column="4">
         
<CheckBox IsThreeState="False" VerticalAlignment="Center" IsChecked="{Binding Path=Sexe}" HorizontalAlignment="Center"/>
    
</Border>

     <Border BorderBrush="Black" BorderThickness="1,1,0,0" Grid.Column="5">
          <TextBox Text="{Binding Path=Couleur}" HorizontalAlignment="Stretch"/>
    
</Border>

     <Border BorderBrush="Black" BorderThickness="1,1,0,0" Grid.Column="6">
         
<ComboBox ItemsSource="{Binding Source={StaticResource OdpCommunes}}" 
                          
SelectedValue="{Binding Path=Ville.Id}" 
                         
SelectedValuePath="Id" 
                         
DisplayMemberPath="Nom" 
                         
HorizontalAlignment="Stretch"/>
    
</Border>

     <Border BorderBrush="Black" BorderThickness="1,1,0,0" Grid.Column="7">
         
<Image Source="../Images/Valider.png" Stretch="None"/>
     </Border>

     <Border BorderBrush="Black" BorderThickness="1,1,1,0" Grid.Column="8">
         
<Image Source="../Images/action-delete.gif" Stretch="None"/>
    
</Border>

     </Grid>
</DataTemplate>

Pour attacher tout cela a ma listbox, il me suffira alors d'ajouter les attributs nécessaires :

<ListBox x:Name="lstContacts"
           
ItemsSource="{Binding Source={StaticResource OdpContacts}}" 
           
ItemsPanel="{DynamicResource ItemsPanelTemplate1}" 
           
ItemTemplate="{DynamicResource DataTemplate1}"/>

et le tour est joué ...



D'autres exemples de customisation d'une listbox :


Une liste de polices de caractères disponibles sur notre poste client


 Ou encore un graphique en histogramme avec toujours le comportement d'une listbox

 

 

Un blog tres interessant sur le même sujet : The powerful of styles and templates in WPF

Yoann Vue
Consultant Technique Pôle.Net

Actuellement noté 3.5 par 2 personne(s)

  • Currently 3,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Rich Internet Application métier

clock mai 15, 2008 15:45 by author aequoy

Après nous avoir inondé d'applications "bling bling" type Youtube "like" et autre QuickSilver Pro (même si elles sont magnifiques Laughing et techniquement bien fichues), Microsoft nous montre maintenant le gros point fort de SilverLight 2 selon moi, l'intégration du framework .Net, les contrôles utilisateurs et le binding de données au travers d'applications informatiques de gestion classiques.

Cette première série de démonstrateurs concerne un domaine qui m'est cher : la santé au travers d'un établissement hospitalier virtuel.

C'est assez sympathique et plus convaincant pour le commun des mortels.

http://www.mscui.net/PatientJourneyDemonstrator/

Alexandre Equoy

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5