IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

[WPF] ControlTemplate - DataTemplate - Style ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut [WPF] ControlTemplate - DataTemplate - Style ?
    Hello!

    je cherche a faire la chose suivante :

    1 style comme celui-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <ListView ....>
    </ListView>
    et 1 autre comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Viewbox>
    <ListView ....>
    </ListView
    </Viewbox>
    Les listviews seraient les mêmes (et utiliseraient également le même style pour les listviewitems!).

    Je peux faire ca comment au plus simple??

    Merci pour votre aide!
    ++

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Dans les ressources, tu déclares un style et après, tu fais:

    <ListView Style={StaticResource TonStyle}"


    Pour les éléments de la listview, c'est ItemContainerStyle

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut
    re! merci pour ta réponse!

    en fait je pense que je me suis mal expliqué! J'ai déjà fais ce que tu me dis, le problème étant de pouvoir switcher entre

    <Viewbox>
    <ListView... />
    </Viewbox>

    ET

    <ListView.../>

    Car le viewbox ne fait pas partie du style de la listview! (je veux vraiment que le viewbox "contienne" la listview dans le 1er style et dans le second style, je ne veux pas du tout de viewbox)

    Je peux peut-etre passer par un <ContentControl> et lui donner 2 styles... par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <Window.Resource>
    <Style x:Key="MyStyle1" TargetType="{x:Type ContentControl}">
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ContentControl}">
                                           <Viewbox>
                                                <ListView x:Name="lstView" ..../>
                                           </Viewbox>
    				</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    
    <Style x:Key="MyStyle2" TargetType="{x:Type ContentControl}">
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ContentControl}">
                                               <ListView x:Name="lstView" ..../>
    				</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    </Window.Resource>
    
    <ContentControl Style="MyStyle1"/>
    Mais après, dans mon code-behind, je fais comment pour accéder à ma ListView (lstView). Je vais perdre l'accès this.lstView.... non?

    Merci pour ton aide!


    edit: en fait la listview devrait alors faire partie d'un 3e style! car son x:Name doit rester le meme!

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Pour pouvoir accéder à ta ListView, tu va devoir parcourir le Template: http://www.developpez.net/forums/sho...d.php?t=324028

  5. #5
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut
    Citation Envoyé par Thomas Lebrun
    Pour pouvoir accéder à ta ListView, tu va devoir parcourir le Template: http://www.developpez.net/forums/sho...d.php?t=324028
    thx! mais j'y arrive tjs pas .... je dois remonter 2 niveaux

    Mon code de test c'est ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    	<Window.Resources>	
    		<Style x:Key="MyLstView" TargetType="{x:Type ContentControl}">
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ContentControl}">
    						<Button Content="Salut!" Name="btn1" Click="btn1_Click"/>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
     
     
    		<Style x:Key="ContentControlStyle1" TargetType="{x:Type ContentControl}">
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ContentControl}">
    						<Viewbox>
    							<ContentControl Style="{DynamicResource MyLstView}"/>
    						</Viewbox>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
     
    		<Style x:Key="ContentControlStyle2" TargetType="{x:Type ContentControl}">
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ContentControl}">
    						<ContentControl Style="{DynamicResource MyLstView}"/>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    	</Window.Resources>
     
     
    	<Grid x:Name="LayoutRoot">
    		<Grid.RowDefinitions>
    			<RowDefinition Height="0.2*"/>
    			<RowDefinition Height="0.8*"/>
    		</Grid.RowDefinitions>
    		<Button Grid.Row="0" Click="btnSwitch_Click">Display Style 2</Button>
     
    		<ContentControl x:Name="myContent"
    						HorizontalAlignment="Stretch" Margin="0,0,0,0"
    						Style="{DynamicResource ContentControlStyle1}"
    						VerticalAlignment="Stretch" Content="" Grid.Row="1"/>
    	</Grid>
    Donc en fait dans le code-behind j'ai accès à "myContent" qui a comme style "ContentControlStyle1". Celui-ci contient le ContentControl avec le style "MyLstView" et c'est ce style qui contient le bouton auquel je veux avoir accès

    Si t'as une solution, je suis preneur

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Ben, avec le lien que je t'ai donné, tu devrais y arriver....

    Quel code behing utilises-tu ?

  7. #7
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut
    ben d'abord je recherche le style qui contient le bouton... donc :

    Style s = (Style)this.FindResource("MyLstView");

    Ensuite, dans ce style je dois recherche le nom du bouton...et là je bloque! Je pensais à qqch du style :

    Button b = (Button)s.FindName("btn1"); // Mais "FindName" n'existe pas...

    donc j'ai essayé avec

    s.Resources.FindName("btn1"); // et ca marche pas non plus...pas étonnant d'ailleurs

  8. #8
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 25
    Par défaut
    yop yop

    Juste pour te féliciter pour ton article sur la séparation de la logique métier du code de présentation!

    D'ailleurs j'applique pas vraiment la règle sur le code que je propose . Mais vu que je ne trouve pas d'autres solutions...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WPF]ControlTemplate avec ComboBox
    Par Babas007 dans le forum Windows Presentation Foundation
    Réponses: 31
    Dernier message: 02/12/2010, 14h31
  2. [WPF] listviewitem - définition style
    Par Manu355 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 29/03/2010, 17h45
  3. WPF : Problème de style
    Par Philenain dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 08/12/2009, 12h52
  4. [WPF][C#] DataTemplate qui marche en WPF mais pas en C#
    Par azerty53 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 07/03/2008, 11h35
  5. [WPF] Problème de style
    Par Invité dans le forum Framework .NET
    Réponses: 11
    Dernier message: 25/11/2007, 00h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo