2010-01-26 4 views
0

Toute aide sur ce problème serait grandement appréciée car j'ai regardé toute la journée autour des réponses autour de cette zone!WPF DataTrigger ne se déclenche pas lorsque le style Application est appliqué?

J'ai appliqué un style global à mon application WPF en ajoutant un dictionnaire fusionné au fichier App.xaml. Cela a appliqué le style à travers l'application comme prévu, mais il y a un certain nombre de choses qu'il a fait que je ne comprends pas complètement.

Je peux vous donner le code que le style applique si cela peut aider, mais il est assez grand, mais il est préférable de ne pas obstruer ce post. Le style applique une couleur d'arrière-plan à chacun des éléments de la liste, ainsi qu'un survol des animations et des changements de couleur. Ce style n'a pas été appliquée à deux des listboxes dans ma demande si, par exemple de code d'un ci-dessous:

<StackPanel Margin="0,15,0,0" Width="auto" HorizontalAlignment="Left"> 
    <StackPanel.Resources> 
     <converter:IntToBoolConverter x:Key="intToBoolConverter" /> 
     <converter:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" /> 
    </StackPanel.Resources> 
    <Label Content="Required Vehicles" HorizontalAlignment="Center" FontWeight="Bold" /> 
    <ListBox x:Name="lstVehicleRequests" ItemsSource="{Binding VehicleRequests}" Width="auto" 
      IsSynchronizedWithCurrentItem="True"> 
     <ListBox.Resources> 
      <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource BaseListBoxItem}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=RequestStatus.RequestStatusId}" Value="7"> 
         <Setter Property="Background"> 
          <Setter.Value> 
           <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
            <GradientStop Color="#FFFFFFFB" Offset="0" /> 
            <GradientStop Color="IndianRed" Offset="0.5" /> 
            <GradientStop Color="#FFFFFFFB" Offset="1" /> 
           </LinearGradientBrush> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ListBox.Resources> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid ShowGridLines="True"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="auto" /> 
         <ColumnDefinition Width="auto" /> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="auto" /> 
         <RowDefinition Height="4" /> 
        </Grid.RowDefinitions> 
        <StackPanel Margin="0,8,0,0"> 
         <TextBlock Margin="0,4,10,0" > 
         <Label Content="Coach Type" Width="120" /> 
         <ComboBox ItemsSource="{Binding DataContext.CoachTypes, 
            RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 
            SelectedItem="{Binding CoachType}" DisplayMemberPath="Name" Width="100" /> 
         </TextBlock> 
         <TextBlock Margin="0,8,10,0"> 
          <Label Content="No of Passengers" Width="120" /> 
          <TextBox 
            keys:ValidKeys.Numeric="True" 
            Validation.ErrorTemplate="{StaticResource validationTemplate}" 
            Style="{StaticResource textBoxInError}" Width="50"> 
           <TextBox.Text> 
             <Binding Path="Passengers" 
                UpdateSourceTrigger="PropertyChanged"> 
              <Binding.ValidationRules> 
               <val:RegularExpressionRule 
                ErrorDescription="Please Enter a Numeric Size" 
                RegularExpression="^\d*$" /> 
              </Binding.ValidationRules> 
             </Binding> 
            </TextBox.Text> 
          </TextBox> 
         </TextBlock> 
         <TextBlock Margin="0,8,10,0"> 
          <Label Content="No of Drivers" Width="120" /> 
          <TextBox 
            keys:ValidKeys.Numeric="True" 
            Validation.ErrorTemplate="{StaticResource validationTemplate}" 
            Style="{StaticResource textBoxInError}" Width="50"> 
           <TextBox.Text> 
            <Binding Path="Drivers" 
             UpdateSourceTrigger="PropertyChanged"> 
             <Binding.ValidationRules> 
              <val:RegularExpressionRule 
               ErrorDescription="Please Enter a Numeric Size" 
               RegularExpression="^\d*$" /> 
              </Binding.ValidationRules> 
             </Binding> 
            </TextBox.Text> 
          </TextBox> 
         </TextBlock> 
         <TextBlock Margin="0,8,10,0"> 
         <Label Content="Positioning Feeder Drivers" Width="120" /> 
          <TextBox 
            keys:ValidKeys.Numeric="True" 
            Style="{StaticResource textBoxInError}" Width="50" MaxLength="3"> 
           <TextBox.Text> 
            <Binding Path="PositioningFeederDrivers" 
             UpdateSourceTrigger="PropertyChanged"> 
             <Binding.ValidationRules> 
              <val:RegularExpressionRule 
               ErrorDescription="Please Enter a Numeric Size" 
               RegularExpression="^\d*$" /> 
              </Binding.ValidationRules> 
             </Binding> 
            </TextBox.Text> 
          </TextBox> 
         </TextBlock> 
         <TextBlock Margin="0,8,10,0">      
         <Label Content="Wheelchair Access" Width="120" /> 
         <ComboBox Width="100" SelectedIndex="{Binding WheelchairAccess, 
            Converter={StaticResource intToBoolConverter}}"> 
          <ComboBoxItem Content="Not Required" /> 
          <ComboBoxItem Content="Required" /> 
         </ComboBox> 
         </TextBlock> 
         <TextBlock Margin="0,8,10,8"> 
         <Label Content="Trailer" Width="120" /> 
         <ComboBox Width="100" SelectedIndex="{Binding Trailer, 
            Converter={StaticResource intToBoolConverter}}"> 
          <ComboBoxItem Content="Not Required" /> 
          <ComboBoxItem Content="Required" /> 
         </ComboBox> 
         </TextBlock> 
        </StackPanel> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</StackPanel> 

J'ai ensuite ajouté la propriété BasedOn comme vous pouvez le voir ci-dessus, pourquoi est-ce que je dois faire pour obtenir le style appliqué à cette zone de liste? D'autres listes de sélection et différents contrôles ont-ils été détectés automatiquement? Quoi qu'il en soit, vous verrez que j'ai un datatrigger contre cette listbox qui devrait changer la couleur du backround lorsque l'état de la requête id = 7. Sans la propriété based on la ligne change la couleur en rouge. Lorsque le style est appliqué, il ne change jamais de couleur et la couleur orange du modèle est toujours appliquée.

AIDE ?????

Très apprécié,

Mark

+0

Si la couleur change au rouge sans la propriété BasedOn, alors votre style est appliqué à votre ListBox correctement, sinon il ne serait pas ont changé. Où est la couleur orange dans le modèle? Quels sont les différents types de contrôles que vous utilisez qui présentent un comportement différent avec cette définition de style? – Dave

+0

La couleur orange est appliquée à cette zone de liste à partir du style baseListBox importé à partir de App.Xaml en tant que dictionnaire fusionné. Nous utilisons la plupart des contrôles de notre application, des listes de sélection, des listes déroulantes, des étiquettes, des boîtes de texte, etc ... Tous ces éléments ont repris le style d'App.xaml sans avoir besoin d'ajouter la propriété BasedOn. Je pensais que cela pouvait être lié au fait que nous modifions le modèle de données de la liste? La question principale est que la propriété BasedOn étant incluse, pourquoi l'arrière-plan ne changera pas avec le datatrigger? J'ai inclus le stlye de base ci-dessous MERCI! – Schnoor

Répondre

0
<Style x:Key="BaseListBoxItem" d:IsControlPart="True" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="SnapsToDevicePixels" Value="true" /> 
     <Setter Property="OverridesDefaultStyle" Value="true" /> 
     <Setter Property="Padding" Value="3" /> 
     <Setter Property="Foreground" Value="{StaticResource OutsideFontColor}" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
        <ControlTemplate.Resources> 
         <Storyboard x:Key="HoverOn"> 
          <DoubleAnimation Duration="00:00:00.1000000" Storyboard.TargetName="BackgroundGradientOver" 
              Storyboard.TargetProperty="Opacity" To="0.73" /> 
         </Storyboard> 
         <Storyboard x:Key="HoverOff"> 
          <DoubleAnimation Duration="00:00:00.4000000" Storyboard.TargetName="BackgroundGradientOver" 
              Storyboard.TargetProperty="Opacity" To="0" /> 
         </Storyboard> 
         <Storyboard x:Key="SelectedOn"> 
          <DoubleAnimation Duration="00:00:00.1000000" Storyboard.TargetName="BackgroundGradientSelected" 
              Storyboard.TargetProperty="Opacity" To="0.84" /> 
          <DoubleAnimation Duration="00:00:00.1000000" Storyboard.TargetName="BackgroundGradientSelectedDisabled" 
              Storyboard.TargetProperty="Opacity" To="0.55" /> 
         </Storyboard> 
         <Storyboard x:Key="SelectedOff"> 
          <DoubleAnimation Duration="00:00:00.4000000" Storyboard.TargetName="BackgroundGradientSelected" 
              Storyboard.TargetProperty="Opacity" To="0" /> 
          <DoubleAnimation Duration="00:00:00.4000000" Storyboard.TargetName="BackgroundGradientSelectedDisabled" 
              Storyboard.TargetProperty="Opacity" To="0" /> 
         </Storyboard> 
        </ControlTemplate.Resources> 
        <Grid SnapsToDevicePixels="true"> 
         <Rectangle x:Name="BackgroundGradientOver" RadiusX="1" RadiusY="1" Stroke="{DynamicResource MouseOverBorderBrush}" 
            Opacity="0" Fill="{DynamicResource MouseOverBrush}"/> 
         <Rectangle x:Name="BackgroundGradientSelectedDisabled" RadiusX="1" RadiusY="1" Opacity="0" Fill="{DynamicResource 
          ListItemSelectedBrush}" Stroke="{DynamicResource ListItemSelectedBorderBrush}"/> 
         <Rectangle x:Name="BackgroundGradientSelected" Stroke="{DynamicResource PressedBorderBrush}" StrokeThickness="1" 
            RadiusX="1" RadiusY="1" Opacity="0" Fill="{DynamicResource PressedBrush}"> 

         </Rectangle> 
         <ContentPresenter x:Name="contentPresenter" Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}" 
              ContentTemplate="{TemplateBinding ContentTemplate}" 
              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" /> 
        </Grid> 
        <ControlTemplate.Triggers> 

         <Trigger Property="IsSelected" Value="true"> 
          <Trigger.ExitActions> 
           <BeginStoryboard Storyboard="{StaticResource SelectedOff}" x:Name="SelectedOff_BeginStoryboard" /> 
          </Trigger.ExitActions> 
          <Trigger.EnterActions> 
           <BeginStoryboard Storyboard="{StaticResource SelectedOn}" x:Name="SelectedOn_BeginStoryboard" /> 
          </Trigger.EnterActions> 

         </Trigger> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Trigger.ExitActions> 
           <BeginStoryboard Storyboard="{StaticResource HoverOff}" x:Name="HoverOff_BeginStoryboard" /> 
          </Trigger.ExitActions> 
          <Trigger.EnterActions> 
           <BeginStoryboard Storyboard="{StaticResource HoverOn}" /> 
          </Trigger.EnterActions> 
         </Trigger> 

         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
Questions connexes