Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF Listview-根据内容更改行的格式_Wpf - Fatal编程技术网

WPF Listview-根据内容更改行的格式

WPF Listview-根据内容更改行的格式,wpf,Wpf,我有一个WPF列表视图,有3列。名称、成本和销售。成本和销售是可编辑的文本框,格式为货币 2个问题: -我可能会列出一些特定的项目,其中成本和销售额需要格式化为百分比,而不是货币。因此,如果Name=“x”,则成本和销售额应具有百分比stringformt 有些商品只需要卖出期权。因此,如果Name=“y”,则不要在成本列中显示文本框 我将如何在WPF中实现这一点?我正在研究DataTriggers,但无法找出如何正确实现 <ListView x:Name="Pricing_LV" H

我有一个WPF列表视图,有3列。名称、成本和销售。成本和销售是可编辑的文本框,格式为货币

2个问题: -我可能会列出一些特定的项目,其中成本和销售额需要格式化为百分比,而不是货币。因此,如果Name=“x”,则成本和销售额应具有百分比stringformt

  • 有些商品只需要卖出期权。因此,如果Name=“y”,则不要在成本列中显示文本框
我将如何在WPF中实现这一点?我正在研究DataTriggers,但无法找出如何正确实现

<ListView x:Name="Pricing_LV" HorizontalAlignment="Left" Height="335" Margin="10,41,0,0" VerticalAlignment="Top" Width="350" TabIndex="22">
    <ListView.View>
        <GridView>

            <GridViewColumn Header="Surcharge" Width="185" DisplayMemberBinding="{Binding Path=Name}"/>

            <GridViewColumn Header="Cost" Width="70">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Width="55" Text="{Binding Path=Cost, StringFormat='c'}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>

            <GridViewColumn Header="Sell" Width="70">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Width="55" Text="{Binding Path=Sell, StringFormat='c'}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

您可能已尝试将数据触发器直接放入
文本框中。触发器
,但随后出现以下错误

错误:触发器集合成员的类型必须为EventTrigger

也见此

解决方案是简单地将
触发器
s包装在
样式中

<ListView x:Name="Pricing_LV" HorizontalAlignment="Left" Height="335" Margin="10,41,0,0" VerticalAlignment="Top" Width="350" TabIndex="22">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Surcharge" Width="185" DisplayMemberBinding="{Binding Path=Name}"/>
            <GridViewColumn Header="Cost" Width="70">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Width="55">
                            <TextBox.Style>
                                <Style TargetType="TextBox">
                                    <Setter Property="Text" Value="{Binding Path=Cost, StringFormat='c'}"></Setter>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Name}" Value="x">
                                            <Setter Property="Text" Value="{Binding Path=Cost, StringFormat=#.00\\%}"></Setter>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Name}" Value="y">
                                            <Setter Property="Text" Value=""></Setter>
                                            <Setter Property="Visibility" Value="Hidden"></Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBox.Style>
                        </TextBox>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="Sell" Width="70">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Width="55">
                            <TextBox.Style>
                                <Style TargetType="TextBox">
                                    <Setter Property="Text" Value="{Binding Path=Sell, StringFormat='c'}"></Setter>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Name}" Value="x">
                                            <Setter Property="Text" Value="{Binding Path=Sell, StringFormat=#.00\\%}"></Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBox.Style>
                        </TextBox>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>


注意:我不使用
p
作为百分比格式,因为我认为这不适合您的情况。另请参见

谢谢!。成功了!你是对的,我丢失了样式标签。