2017-10-17 2 views
0

J'essaie d'appliquer une mise en forme globale à mon application. L'application est déjà construite. Lorsque je montre des données dans une grille de données, je veux mettre en forme et aligner à droite tous les blocs de texte qui s'y trouvent. Est-ce possible de le faire en utilisant un déclencheur ou un autre moyen? Est-il possible de savoir si un chemin de liaison contient le mot "quantité" et s'il applique le formatage requis.Formatage et alignement génériques en XAML basé sur le déclencheur

Fondamentalement, je veux contrôler le formatage et l'alignement en fonction des valeurs de l'application entière à partir d'un emplacement. Alors qu'il est facile de changer à plus long terme.

Voici mon XAML pour une vue:

<UserControl x:Class="CPOSApplication.UserControls.Sales.SalesFilterResult" 
      xmlns:PaginationControl="clr-namespace:CPOSApplication.GeneralControl.PaginationControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:localConvertor="clr-namespace:CPOSApplication.Convertors" 
      xmlns:com="pagina" 
      xmlns:local="clr-namespace:CPOSApplication.Convertors" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="1000"> 
    <UserControl.Resources> 
     <local:DataGridRowToIndexConvertor x:Key="RowToIndexConvertor"> 

     </local:DataGridRowToIndexConvertor> 
     <localConvertor:PermissionToEnableConvertor x:Key="PermissionToBoolConvertor"/> 
    </UserControl.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="4*" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Label x:Name="GridLabel" Grid.Row="0" Style="{DynamicResource HeadingLabelsCustomStyle}" Content="Sales"/> 
     <DataGrid Grid.Row="1" Style="{DynamicResource DataGridStyle}" ColumnHeaderStyle="{DynamicResource DataGridColumnHeaderStyle}" RowStyle="{DynamicResource DataGridRowStyle}" CellStyle="{DynamicResource DataGridCellStyle}" x:Name="SalesGrid"> 
      <DataGrid.Columns> 
       <DataGridTemplateColumn Header="Id" Visibility="Collapsed" Width="Auto" IsReadOnly="True"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=Id}" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Index" Width="*" IsReadOnly="True"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock x:Name="IndexCell" Style="{DynamicResource GridTextBlock}" Text="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Converter={StaticResource RowToIndexConvertor}}" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Serial Number" Width="*" IsReadOnly="True"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=SerialNumber}" Style="{DynamicResource GridTextBlock}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Customer" Width="*" IsReadOnly="True" > 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=CustomerName}" Style="{DynamicResource GridTextBlock}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Payment Method" Width="*" IsReadOnly="True" > 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=FormattedPaymentType}" Style="{DynamicResource GridTextBlock}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Sale Date" Width="*" IsReadOnly="True" > 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=CreatedDate}" Style="{DynamicResource GridTextBlock}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Sale Amount" Width="*" IsReadOnly="True" > 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=TotalAmount}" Style="{DynamicResource GridTextBlock}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Width="*" Header="Actions" IsReadOnly="True"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Style="{DynamicResource ActionPanel}"> 
           <Image x:Name="EditImg" IsEnabled="{Binding Converter={StaticResource PermissionToBoolConvertor}, ConverterParameter='Edit Sale|Sale'}" Visibility="{Binding Converter={StaticResource LiveConnectionToVis}}" Style="{DynamicResource EditImg}" Source="/CPOSApplication;component/Resources/Images/Icons/edit.png" Tag="{Binding}" MouseDown="Edit_Click"></Image> 
           <Image x:Name="DeleteImg" IsEnabled="{Binding Converter={StaticResource PermissionToBoolConvertor}, ConverterParameter='Delete Sale|Sale'}" Visibility="{Binding Converter={StaticResource LiveConnectionToVis}}" Style="{DynamicResource DeleteImg}" Source="/CPOSApplication;component/Resources/Images/Icons/delete.png" Tag="{Binding}" MouseDown="Delete_Click"></Image> 
          </StackPanel> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
     </DataGrid> 
     <PaginationControl:Paginator Background="#e4e4e4" x:Name="pager" Grid.Row="2" VerticalAlignment="Bottom" Margin="0,10,0,0" Height="30" /> 
    </Grid> 
</UserControl> 

Répondre

-1

Vous pouvez TextBlocks de liaison comme ceci:

<TextBlock Text="{Binding Path=TotalAmount}" TextAlignment="{Binding Path=TotalAmount, Converter="{StaticResource ContentToAlignmentConverter}" /> 

Vous devrez implémenter ContentToAlignmentConverter vous. Je ne vais pas mettre un code ici, car cela dépend de ce que vous voulez exactement vérifier, mais il est assez facile de le faire vous-même. Here is a sample of a value converter in WPF

EDIT:

Si vous souhaitez appliquer ce changement à tous vos TextBlocks dans votre DataGrid, vous devriez essayer quelque chose comme ça (pas sûr si cela va fonctionner, mais il faut):

<DataGrid.Resources> 
    <Style TargetType="{x:Type TextBlock}" BasedOn="{DynamicResource GridTextBlock}"> 
     <Setter Property="TextAlignment" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Text, Converter="{StaticResource ContentToAlignmentConverter}}" /> 
    </Style> 
</DataGrid.Resources> 
+0

Je devrai ajouter ce convertisseur dans chaque TextBlock de cette façon. Y a-t-il une façon générique de le faire? –

+0

Juste édité ma réponse pour inclure l'application de convertisseur à tous les TextBlocks. Je ne pense pas que vous devriez le faire sur une portée plus large que DataGrid (ou sans mettre x: Key au style, car cela peut vous causer des problèmes avec d'autres contrôles qui utilisent TextBlocks à l'intérieur). –

+0

Faites-moi savoir si cela fonctionne pour vous –