应用自定义样式时,DatGridCell 会重置

血灾

我有一个包含 Data 的 DataGrid,我想让该 dataGrid 中的所有数据都以它所在的 DataGridCell 为中心。

所以我做了如下(xaml文件)

<Window x:Class="WPF_Prj.View.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
    xmlns:local="clr-namespace:WPF_Prj.View"
    xmlns:vm="clr-namespace:WPF_Prj.ViewModel"
    Title="[Portfolio] MainWindow" Height="500" Width="800">


<StackPanel Orientation="Vertical">
    <DataGrid x:Name="datagrid" AutoGenerateColumns="False" CanUserAddRows="False"
            Width="Auto" Margin="5,5,0,5" HorizontalAlignment="Left" CellEditEnding="datagrid_CellEndEditing">

        <DataGrid.Resources>
            <vm:PositiveConverter x:Key="PositiveConverter"/>                
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="TextBlock.TextAlignment" Value="Center"/>
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
            </Style>
        </DataGrid.Resources>

        <DataGrid.Columns>
            <DataGridTextColumn                             Header="Name"           Binding="{Binding Name}"                                    IsReadOnly="True"   Width="Auto"/>
            <DataGridTextColumn                             Header="Owned Qty"      Binding="{Binding OwnedQty}"                                IsReadOnly="True"   Width="Auto"/>
            <DataGridTextColumn x:Name="_UnitCost"          Header="Unit Cost"      Binding="{Binding UnitCost}"            IsReadOnly="True"                       Width="Auto"/>
            <DataGridTextColumn x:Name="_MarketCost"        Header="Market Cost"    Binding="{Binding MarketCost}"          IsReadOnly="True"                       Width="Auto"/>
            <DataGridTextColumn     Header="Ordered Qty"    Binding="{Binding OrderedQty,       Mode=TwoWay }"                                 IsReadOnly="False"  Width="Auto">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell" >
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ColorCost}" Value="-1">
                                <Setter Property="Background" Value="Moccasin"/>
                                <Setter Property="Foreground" Value="Black"/>
                                <Setter Property="BorderThickness" Value="3"/>
                                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ColorCost}" Value="1">
                                <Setter Property="Background" Value="GreenYellow"/>
                                <Setter Property="Foreground" Value="Black"/>
                                <Setter Property="BorderThickness" Value="3"/>
                                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                                <Setter Property="HorizontalContentAlignment" Value="Center"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
            <DataGridTextColumn   Header="Confirmed Qty"  Binding="{Binding ConfirmedQty, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay }" IsReadOnly="True"   Width="Auto"/>
        </DataGrid.Columns>

    </DataGrid>
    <StackPanel Name="ButtomsZone" Orientation="Horizontal">
        <Button x:Name="YellOrders"  Content="Simulate Orders" Width="125" FontFamily="Fire Code" Click="YellOrders_Click" Margin="18,0" Height="25"/>
        <Button x:Name="Confirm"   Content="Confirm Orders"  Width="125" FontFamily="Fire Code" Click="Confirm_Click" Margin="25,0" IsEnabled="False"/>            
        <ComboBox>
            <ComboBoxItem IsSelected="True">Prioritize cheap goods</ComboBoxItem>
            <ComboBoxItem>Prioritize expensive goods</ComboBoxItem>    
        </ComboBox>
    </StackPanel>
</StackPanel>
</Window>

所以如下图所示,所有数据都被拉伸并居中对齐,除了Ordered Qty我试图加强对齐但没有成功的数据。

在此处输入图片说明

问题是我如何使该列拉伸并使其内容居中?先感谢您。

15ee8f99-57ff-4f92-890c-b56153

您正在该列上显式设置 CellStyle,这意味着它不使用您在 DataGrid.Resources 中定义的隐式 DataGridCell 样式。

这很容易修复在以下两种方法之一:要么这两个对准setter方法添加到样式为“有序数量”,或者更好的,使用BasedOn属性的基础上的默认样式,这将导致其继承一切的默认样式风格有:

<DataGridTextColumn.CellStyle>
    <Style 
        TargetType="DataGridCell" 
        BasedOn="{StaticResource {x:Type DataGridCell}}"
        >
        <Style.Triggers>
            <DataTrigger Binding="{Binding ColorCost}" Value="-1">

如果您在下周向默认单元格样式添加其他内容,它将自动包含在“订购数量”的专用样式中。

更新:对齐是怎么回事?

单元格中显示的值为文本,显示在 TextBox 或 TextBlock 中。文本的文本框或TextBlock的是左对齐默认。因此,您必须设置TextBlock.TextAlignment,它将被 TextBox 或 TextBlock 继承,并使其将自己的内容居中。

默认情况下,TextBox 或 TextBlock 被拉伸以填充 DataGridCell 的整个宽度,因为这是 DataGridCell 对其内容所做的。您不需要任何 Horizo​​ntalAlignment 设置器。他们是多余的。出于这个原因,我会删除它们:我不喜欢将无操作代码留在原处,因为明年我或其他人会重新访问代码,并且可能会浪费时间认为它在那里是有原因的。

在某些列表控件中,例如 ListBox,项目内容是左对齐的,您可能需要HorizontalContentAlignment在 ListBox 上进行设置DataGrid 不是这种情况。事实上,如果您想看到一些奇怪的东西,请为您的隐式 DataGridCellStyle 试试这个:

<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridCell}">
        <Setter Property="TextBlock.TextAlignment" Value="Center"/>
        <Setter Property="HorizontalAlignment" Value="Left"/>
    </Style>
</DataGrid.Resources>

此处,显示文本的控件仅与其内容一样宽。它仍然以内容为中心,但你无法分辨,因为两边都没有空间。此外,线条看起来很有趣。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么点击后退按钮时我的活动会重置?

应用程序崩溃时,共享的首选项会重置数据。请指导

使用代码中的样式自定义Qt滑块时,手柄会脱离凹槽

小部件问题:退出主应用程序会重置小部件中的静态变量

从prop事件处理程序设置时,反应状态会重置

重新渲染时,react组件会重置其状态吗?

更改对象向量的对象时,值会不断重置

MS Word:将选择更改为自定义样式会影响整个段落

navigationController的Alpha是否会重置?当应用程序从后台启动时

重置IIS或应用程序池会影响PHP会话吗?

pyqt-自定义QComboBox类样式重置为默认值

翻转设备时进度条会重置

为什么单击此jQuery Datepicker时单选按钮会重置

为自定义控件创建样式资源会删除模板

单击重置按钮时,重置自定义角度滤镜

处理多个文件时,awk的范围会重置

单击重置按钮后,无法重置自定义单选按钮样式

保存时,日期/时间戳会重置为now()吗?

输入if语句时,变量是否会重置?

关闭终端时,我的 PATH 变量会自行重置

应用于 selected() select 的重置也会重置占位符

Swing - 更改 Windows 主题会重置自定义边框、插图和背景

自定义检查器枚举在播放时重置

使用 AWS CloudFormation 添加环境变量会重置 AWS Beanstalk 应用程序

应用程序发送到后台后,带有变化的属性 UILabel 会重置文本

Firebase 密码重置自定义

自定义 moreNavigationController 旋转后重置

即使在重置列表时,python for 循环中的进程也会变慢

如何重置自定义表单控件?

TOP 榜单

热门标签

归档