WPF C#Datagrid更改最后一行的布局 [英] WPF C# Datagrid change last row layout

查看:58
本文介绍了WPF C#Datagrid更改最后一行的布局的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据网格,其中显示了有关周期开始和结束的值。为此,我创建了一个带有2个文本块的列模板,但是在最后一行中,我显示了这些值之间的百分比差异。我想做的是将最后一行的第一个文本块居中,因为该行只有一个值。

I have a datagrid where I show values about the beginning and the end of a period. For that I created a column template with 2 textblocks, but in the last row I show a diference between these values as percentage. What I want to do is to centerlize the first text block in the last row as I have only one value in that row.

<DataGridTemplateColumn>
    <DataGridTemplateColumn.Header>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="10"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Officer11Nome}"
                       HorizontalAlignment="Center" 
                       Grid.Column="0"
                       Grid.Row="0"
                       Grid.ColumnSpan="3"
                       />
            <TextBlock Text="Abertura" 
                       HorizontalAlignment="Center" 
                       Grid.Column="0"
                       Grid.Row="1"
                       />

            <TextBlock Text="Fechamento" 
                       HorizontalAlignment="Center" 
                       Grid.Column="2"
                       Grid.Row="1"
                       />
        </Grid>
    </DataGridTemplateColumn.Header>

    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="10"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Officer1Abertura}" Margin="2,0,2,0" TextAlignment="Left" Grid.Column="0"/>
                <TextBlock Text="{Binding Officer1Fechamento}" Margin="2,0,2,0" TextAlignment="Right" Grid.Column="2"/>
            </Grid>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

谢谢。

推荐答案

这是使用触发器的解决方法
(1)创建第三个属性。当其显示时,其他两个将不显示。将其保持为空,直到未计算出来。我暂时将其命名为differencofvalues。给出适当的名称并绑定

This is workaround playing with trigger (1) Create third property . When its shown the other two will not be shown. Keep it null till the time its not calculated. for the time being i name it as differencofvalues. Give appropriate name and bind

<DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Name="textbox1" Text="{Binding Officer1Abertura}" Margin="2,0,0,0" TextAlignment="Center" Width="Auto" />
                    <TextBlock Text="{Binding differenceOfValues}" Margin="0,0,0,0" TextAlignment="Center" Width="Auto">
                        <TextBlock.Style>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="Visibility" Value="Visible"/>
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding differenceOfValues}" Value="{x:Null}">
                                        <Setter Property="Visibility" Value="Collapsed"></Setter>
                                        <Setter Property="{Binding ElementName=textbox1, Path=Visibility}" Value="Visible"></Setter>
                                        <Setter Property="{Binding ElementName=textbox2, Path=Visibility}" Value="Visible"></Setter>
                                    </DataTrigger>
                                    <Trigger Property="Visibility" Value="Visible">
                                        <Setter Property="{Binding ElementName=textbox1, Path=Visibility}" Value="Collapsed"></Setter>
                                        <Setter Property="{Binding ElementName=textbox2, Path=Visibility}" Value="Collapsed"></Setter>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </TextBlock.Style>
                    </TextBlock>
                    <TextBlock Name="textbox2" Text="{Binding Officer1Fechamento}" Margin="10,0,2,0" TextAlignment="Center" Width="Auto" Visibility="Collapsed" />
                </StackPanel>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>

这篇关于WPF C#Datagrid更改最后一行的布局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆