none
Style, Triggers, Dependency Properties : pour un UserControl RRS feed

  • Question

  •  Bonjour,

    Voila j'essais de faire un UserControl avec un style contenant un triggers.

    Probleme quand j'applique le style a mon userControl il me dis :
    JMBSearchControl' TargetType does not match type of element 'UserControl'.

    Le but de ce style c'est que si l'utilisateur referencie la propriete DisplayDataAtOpening a 1, la proprieter VResultVisibility sera Visible et a Collapsed si DisplayDataAtOpening est a 0. Ensuite la ligne en gras et a 20 pixcell pour les caractere de mon xaml sera binder sur VResultVisibility.

    Est-ce que quelqu'un peut me dire ce qui ne va pas dans mon code S'il vous plait?

    Aussi la proprieter est de type int. Idealement j'aimerais qu'elle soit de type bool mais il semblerait avoir un probleme avec les dependency properties et les bool de ce que j'ai pu lire sur une discussion du forum. Mais bon ceci est un tous petit détails. La question principal est : C'est quoi qui cloche dans mon style ou mon usercontrol?

    Merci Beaucoup.


    xaml du userControl.

    <UserControl  x:Class="JMB.FRAMEWORK.WPF.UserControls.JMBSearchControl" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:jmb="clr-namespace:JMB.Framework.WPF;assembly=JMB.Framework.WPF" 
        xmlns:jmbGrid="http://schemas.microsoft.com/wpf/2008/toolkit" 
        xmlns:local="clr-namespace:JMB.FRAMEWORK.WPF.UserControls" 
        Height="544"  Width="422" Style="{DynamicResource TriggerStyle}">  
        <UserControl.Resources> 
            <Style x:Key="TriggerStyle" TargetType="{x:Type local:JMBSearchControl}">  
                <Style.Triggers> 
                    <Trigger Property="DisplayDataAtOpening" Value="1">  
                        <Setter Property="VResultVisibility" Value="Visible"/>  
                    </Trigger> 
                    <Trigger Property="DisplayDataAtOpening" Value="0">  
                        <Setter Property="VResultVisibility" Value="Collapsed"/>  
                    </Trigger> 
                </Style.Triggers> 
            </Style> 
        </UserControl.Resources> 
           
        <!--Definition du controle--> 
        <Grid Width="379" Height="507" Name="_grdMain">  
                <StackPanel Orientation="Vertical">  
                    <jmb:View jmb:ViewItem.LabelPadding="3"   
                                  jmb:ViewItem.LabelPosition="Left"   
                                  Name="vSearch" Height="150"   
                                  MinHeight="32.35" MinWidth="365"   
                                  Width="371"   
                                  Margin="3.2,10,14.5,0"   
                                  VerticalAlignment="Top" 
                                  jmb:ViewItem.ContentPadding="2" 
                                  > 
                        <jmb:View.ItemsPanel> 
                            <ItemsPanelTemplate> 
                                <StackPanel Orientation="Vertical"></StackPanel> 
                            </ItemsPanelTemplate> 
                        </jmb:View.ItemsPanel> 
                        <TextBox Name="txtSearch1" TextChanged="txtSearch1_TextChanged"  Height="25" Width="290" jmb:ViewItem.LabelContent="Critère1"/>  
                        <TextBox Name="txtSearch2"   Height="25" Width="290" jmb:ViewItem.LabelContent="Critère1"/>  
                        <TextBox Name="txtSearch3"   Height="25" Width="290" jmb:ViewItem.LabelContent="Critère1"/>  
                        <TextBox Name="txtSearch4"   Height="25" Width="290" jmb:ViewItem.LabelContent="Critère1"/>  
                        <Button  Click="btnSearch_Click"  Name="btnSearch" Width="25" Height="25" IsEnabled="False"></Button> 
                    </jmb:View> 
                    <jmb:View Margin="0,5" 
                              Name="vResult"   
                              Height="335" Width="369" Visibility="{Binding Path=VResultVisibility}">                  
                    <ListView Margin="0,5" Name="lstResult" Width="369" Height="327" MinHeight="327" MinWidth="369">  
                            <ListView.View> 
                                <GridView> 
                                    <GridViewColumn Header="ID" DisplayMemberBinding="{Binding Path=ENTITEMD_ID}"></GridViewColumn> 
                                    <GridViewColumn Header="NOM TABLE DB" DisplayMemberBinding="{Binding Path=ENTITEMD_NOM_TABLE_DB}"></GridViewColumn> 
                                    <GridViewColumn Header="Definition L01" DisplayMemberBinding="{Binding Path=ENTITEMD_DEFINITION_L01}"></GridViewColumn> 
                                </GridView> 
                            </ListView.View> 
                        </ListView> 
                    </jmb:View> 
            </StackPanel> 
        </Grid> 
    </UserControl> 


    Le code behind pour les dependency properties

    /// <summary> 
                    /// Doit on afficher les données a l'ouverture du control  
                    /// ou doit on attendre que l'utilisateur   
                    /// effectue une recherche  
                    /// </summary> 
                    public int DisplayDataAtOpening  
                    {  
                        get { return (int)GetValue(DisplayDataAtOpeningProperty); }  
                        set { SetValue(DisplayDataAtOpeningProperty, (int)value); }                      
                    }  
                    public static DependencyProperty DisplayDataAtOpeningProperty = DependencyProperty.Register("DisplayDataAtOpening", typeof(int), typeof(JMBSearchControl));  
     
    public Visibility VResultVisibility  
                    {  
                        get  
                        {  
                            return (Visibility)GetValue(VResultVisibilityProperty);  
                        }  
                        set  
                        {  
                            SetValue(VResultVisibilityProperty, (Visibility)value);  
                        }  
                    }  
                    public static DependencyProperty VResultVisibilityProperty = DependencyProperty.Register("VResultVisibility", typeof(Visibility), typeof(JMBSearchControl)); 
     
    Pascal Wick
    Programmeur-Analyste Sr.
    mercredi 11 février 2009 14:23