2017-10-17 52 views
0

我試圖在我的應用程序上應用整體格式。該應用程序已經建立。在數據網格中顯示數據時,我想格式化並右對齊其中包含數量的所有文本塊。這有可能使用某種觸發器或任何其他方式做到這一點?是否有可能知道綁定路徑是否包含單詞「amount」,以及它是否應用了所需的格式。基於觸發器的XAML中的通用格式和對齊方式

基本上我想根據一個位置的整個應用程序的值來控制格式和對齊。因此,從長遠來看很容易改變。

這裏是我的觀點XAML:

<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> 

回答

-1

你可以嘗試結合的TextBlocks這樣的:

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

你將不得不自己實現ContentToAlignmentConverter。我不會在這裏放置一個代碼,因爲它取決於你想要檢查的內容,但是你自己做它很容易。 Here is a sample of a value converter in WPF

編輯:

如果要將此更改過自己的DataGrid中所有的TextBlocks,你應該嘗試這樣的事情(不知道是否會工作,但它應該):

<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

我需要用這種方式在每個TextBlock中添加此轉換器。有沒有通用的方式來做到這一點? –

+0

剛剛編輯我的答案,包括將轉換器應用於所有TextBlocks。我認爲你不應該在比DataGrid更廣泛的範圍內進行操作(或者不要將x:Key設置爲樣式,因爲它可能會導致您在其中使用TextBlocks的其他控件出現問題)。 –

+0

讓我知道這是否適合你 –