【问题标题】:Setting ListView Background设置 ListView 背景
【发布时间】:2014-01-20 08:35:13
【问题描述】:

我希望用不同的画笔设置背景,但是它不起作用。没有错误,没有警告。

在我的代码中,我希望 ListView 中的行有不同的背景,所以,我为 ListViewItem 定义了一个 Style,但它现在不知道。在调试代码时,我可以进入 local:NumberConverter:Convert(object value, Type targetType, object parameter, CultureInfoculture),但是行的背景保持原来的颜色。

<UserControl x:Class="demo05_wpf02_binding.TabControl2"
             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:local="clr-namespace:demo05_wpf02_binding"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">

    <UserControl.Resources>
        <Style x:Key="BookListStyle" TargetType="{x:Type ListViewItem}">
            <Style.Resources>
                <LinearGradientBrush x:Key="ProfitBrush" StartPoint="0.2,0" EndPoint="0.8,1">
                    <GradientStop Offset="0.3" Color="LavenderBlush" />
                    <GradientStop Offset="0.7" Color="CornflowerBlue" />
                </LinearGradientBrush>

                <LinearGradientBrush x:Key="LossBrush" StartPoint="0.2,0" EndPoint="0.8,1">
                    <GradientStop Offset="0.3" Color="LightYellow" />
                    <GradientStop Offset="0.7" Color="LightGoldenrodYellow" />
                </LinearGradientBrush>

                <local:NumberConverter x:Key="numConverter" />
            </Style.Resources>

            <Style.Triggers>
                <DataTrigger Binding="{Binding Title, Converter={StaticResource numConverter}}" Value="0" >
                    <Setter Property="Background" Value="{StaticResource ProfitBrush}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Title, Converter={StaticResource numConverter}}" Value="1" >
                    <Setter Property="Background" Value="{StaticResource LossBrush}" />
                </DataTrigger>
            </Style.Triggers>

        </Style>
    </UserControl.Resources>

    <DockPanel>
        <ListView Name="ListView01" ItemContainerStyle="{StaticResource BookListStyle}"  ItemsSource="{Binding}"  Margin="5">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Title" DisplayMemberBinding="{Binding Title}" Width="80" />
                    <GridViewColumn Header="Publisher" DisplayMemberBinding="{Binding Publisher}" Width="100" />
                    <GridViewColumn Header="ISBN" DisplayMemberBinding="{Binding ISBN}" Width="100" />
                </GridView>
            </ListView.View>
        </ListView>
    </DockPanel>
</UserControl>

【问题讨论】:

  • 输出应该会显示更多信息。
  • @Sankarann,从逻辑上讲,您会认为这是真的……但事实并非如此。数据类型实例的属性inside ListBoxItem 可以在Style 中访问ListBoxItem
  • 你想要什么输出?编译输出还是 UI 输出? @AnatoliiGabuza

标签: wpf wpfdatagrid


【解决方案1】:

您的问题必须在于您的Converter。如果您删除了Converter,那么您的 XAML 就可以正常工作,如果您的数据项的 Title 值为 10

<Style x:Key="BookListStyle" TargetType="{x:Type ListViewItem}">
    <Style.Resources>
        <LinearGradientBrush x:Key="ProfitBrush" StartPoint="0.2,0" EndPoint="0.8,1">
            <GradientStop Offset="0.3" Color="LavenderBlush" />
            <GradientStop Offset="0.7" Color="CornflowerBlue" />
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="LossBrush" StartPoint="0.2,0" EndPoint="0.8,1">
            <GradientStop Offset="0.3" Color="LightYellow" />
            <GradientStop Offset="0.7" Color="LightGoldenrodYellow" />
        </LinearGradientBrush>
    </Style.Resources>            
    <Style.Triggers>
        <DataTrigger Binding="{Binding Title}" Value="0" >
            <Setter Property="Background" Value="{StaticResource ProfitBrush}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Title}" Value="1" >
            <Setter Property="Background" Value="{StaticResource LossBrush}" />
        </DataTrigger>
    </Style.Triggers>            
</Style>

因此,请仔细查看Converter... 中的代码...在此处设置断点并单步执行代码,直到找到问题所在。另一件需要注意的事情是,您的LossBrush 很难被看到......也许更强的颜色会有所帮助,即使只是在测试时使用。

【讨论】:

  • 感谢 Sheridan,也许我需要再次检查我的代码。而且,我同意你的观点,LossBrush 是一种糟糕的颜色。我需要一个新的。 @Sheridan
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 2017-07-03
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多