2017-09-05 9 views
0

J'ai un Ellipse dans chaque TabControl en-tête qui est de mettre en surbrillance bleu s'il y a des éléments sélectionnés dans le DataGrid ci-dessous, sinon il devrait être transparent. En ce moment j'ai le Trigger en sens inverse donc si le DataGridSelectedItems.Count est 0 il est transparent, s'il y a un chemin pour avoir la valeur par défaut qui serait sympa.Comment définir le déclencheur de style Ellipse sur TabControl pour mettre en surbrillance lorsque DataGrids a la sélection

Remarque: Il aura plusieurs onglets associés et DataGrids.

Comment puis-je obtenir le StyleTrigger fonctionne correctement sur le Ellipse?

enter image description here

<TabControl Name="tcGeometry" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5" ItemsSource="{Binding GEOMETRIES}" > 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <Grid>        
       <TextBlock Text="{Binding DISPLAY_NAME}" Margin="0,0,25,0"/> 
       <Ellipse x:Name="SelectionIndicator" 
         Width="8" Height="8" 
         Stroke="Black" 
         Fill="Blue" 
         StrokeThickness="1" 
         HorizontalAlignment="Right" 
         VerticalAlignment="Top"> 
        <Ellipse.Style> 
         <Style TargetType="{x:Type Ellipse}"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding SelectedItems.Count, ElementName=dgAudit}" Value="0"> 
            <Setter Property="Fill" Value="Transparent" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </Ellipse.Style> 
       </Ellipse> 
      </Grid> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <Grid ShowGridLines="False"> 
       <DataGrid Name="dgAudit" 
          Grid.Row="0" 
          Grid.Column="0" 
          IsReadOnly="True" 
          ItemsSource="{Binding GEOM_ASSET_OC_LIST}" 
          HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
          AutoGenerateColumns="False" 
          HorizontalAlignment="Stretch" 
          VerticalAlignment="Stretch" 
          RowDetailsVisibilityMode="Collapsed" 
          RowHeaderWidth="30" /> 
      </Grid> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 
+0

Vous pouvez lier la propriété '' Tag' de chaque TabItem' la 'DataGrid' correspondante et utiliser dans le chemin de la propriété de liaison de votre Trigger. – dymanoid

Répondre

1

Ne pas régler une valeur locale pour la propriété Fill du Ellipse. Définissez la valeur par défaut dans un setter Style.

<Ellipse x:Name="SelectionIndicator" 
         Width="8" Height="8" 
         Stroke="Black" 
         StrokeThickness="1" 
         HorizontalAlignment="Right" 
         VerticalAlignment="Top"> 
    <Ellipse.Style> 
     <Style TargetType="{x:Type Ellipse}"> 
      <Setter Property="Fill" Value="Blue" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding SelectedItems.Count, ElementName=dgAudit}" Value="0"> 
        <Setter Property="Fill" Value="Transparent" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Ellipse.Style> 
</Ellipse> 

Les valeurs locales ont priorité sur les valeurs définies dans les styles: https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence

Vous pouvez également se lier à la propriété Count d'une collection source qui garde la trace des éléments sélectionnés plutôt que de se lier à la SelectedItems propriété de l'élément DataGrid. En effet, un TabControl par défaut l'arborescence visuelle par éjaculer de l'onglet Unselect lorsque vous Buttées:

How to stop Wpf Tabcontrol to unload Visual tree on Tab change

+0

malheureusement le déclencheur ne répond toujours pas lorsque SelectedItems.Count = 0. Le remplissage de l'ellipse est toujours bleu, des idées sur ce qui pourrait se passer? Je sélectionne et désélectionne un article et il n'y a pas de changement. – Hank

+0

Création d'une collection séparée de SelectedItems travaillé, j'ai également trouvé que la liaison IsSelected sur le DataGridRow à l'objet de données de ligne empêche la sélection réelle de disparaître. – Hank