vb listview如何选定指定行,按“command1”的时候选定第二行(高亮),如何操作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb listview如何选定指定行,按“command1”的时候选定第二行(高亮),如何操作?相关的知识,希望对你有一定的参考价值。

参考技术A VB设置某行为选中/非选中状态:\\x0d\\x0aListView.ListItems(i).Selected = True \'第i行被选中\\x0d\\x0aListView.ListItems(i).Selected = False \'第i行不被选中\\x0d\\x0a所以下面就表示选顶第二行,取消选中第一行。\\x0d\\x0aPrivate Sub Command1_Click()\\x0d\\x0a ListView1.ListItems(2).Selected = True\\x0d\\x0a ListView1.ListItems(1).Selected = False\\x0d\\x0aEnd Sub

如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)

【中文标题】如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)【英文标题】:How do I change text color on the selected row inside a ListView/GridView? (using Expression Dark theme) 【发布时间】:2011-02-24 18:42:12 【问题描述】:

我正在使用带有 ListView(视图属性设置为 GridView)的 Expression Dark WPF 主题(http://wpfthemes.codeplex.com/)来显示一些用户数据,如下所示:

<ListView
      Grid.Row="1"
      ItemsSource="Binding RegisteredUsers"
      SelectedItem="Binding SelectedUser"
      > 
      <ListView.View>
        <GridView>
          <GridViewColumn            
            Header="Login"
            DisplayMemberBinding="Binding Login"
            Width="60"/>
          <GridViewColumn
            Header="Full Name"
            DisplayMemberBinding="Binding FullName"
            Width="180"/>
          <GridViewColumn
            Header="Last logon"
            DisplayMemberBinding="Binding LastLogon"
            Width="120"/>
          <GridViewColumn
            Header="Photo"
            Width="50">
            <GridViewColumn.CellTemplate>
              <DataTemplate>
                <Image 
                  Source="Binding Photo" 
                  Width="30" 
                  Height="35"/>
              </DataTemplate>
            </GridViewColumn.CellTemplate>
          </GridViewColumn>
        </GridView>
      </ListView.View>
    </ListView>

这些行在选择时具有带有深色背景和白色背景的白色文本,但是在选择时文本颜色不会改变并且很难阅读,我希望在选择行时文本具有深色。我已经搜索了一种设置文本颜色样式的方法,但没有成功,这是 ListViewItem 的控件模板:

<Border SnapsToDevicePixels="true" BorderBrush="TemplateBinding BorderBrush" BorderThickness="TemplateBinding BorderThickness" CornerRadius="2" x:Name="border">

            <Grid Margin="2,0,2,0">
              <Rectangle x:Name="Background" IsHitTestVisible="False" Opacity="0.25" Fill="StaticResource NormalBrush" RadiusX="1" RadiusY="1"/>
              <Rectangle x:Name="HoverRectangle" IsHitTestVisible="False" Opacity="0" Fill="StaticResource NormalBrush" RadiusX="1" RadiusY="1"/>
              <Rectangle x:Name="SelectedRectangle" IsHitTestVisible="False" Opacity="0" Fill="StaticResource SelectedBackgroundBrush" RadiusX="1" RadiusY="1"/>
              <GridViewRowPresenter SnapsToDevicePixels="TemplateBinding SnapsToDevicePixels" Margin="0,2,0,2" VerticalAlignment="Stretch" />
            </Grid>

</Border>

更改背景颜色的触发器只是应用动画来更改“SelectedRectangle”不透明度,但我无法更改同一触发器上的文本颜色(我尝试在 ListViewItem 上使用设置器设置前景色,但没有成功)。

有人知道吗?

【问题讨论】:

【参考方案1】:

通过在 GridViewRowPresenter 范围上应用文本块样式来解决:

<GridViewRowPresenter SnapsToDevicePixels="TemplateBinding SnapsToDevicePixels" Margin="0,2,0,2" VerticalAlignment="Stretch" >
                                <GridViewRowPresenter.Resources>
                                    <Style        
                                        TargetType="x:Type TextBlock"
                                        BasedOn="StaticResource x:Type TextBlock"
                                        >      
                                        <Style.Triggers>
                                            <DataTrigger
                                                Binding="Binding Path=IsSelected, RelativeSource=RelativeSource AncestorType=x:Type ListViewItem"
                                                Value="True">
                                                <Setter 
                                                    Property="Foreground"
                                                    Value="Black"
                                                    />
                                            </DataTrigger>
                                        </Style.Triggers>                                                                             
                                    </Style>
                                </GridViewRowPresenter.Resources>
                            </GridViewRowPresenter>

【讨论】:

【参考方案2】:

尝试更改 TextBlock.Foreground

 <GridViewRowPresenter TextBlock.Foreground="TemplateBinding Foreground"/>

【讨论】:

以上是关于vb listview如何选定指定行,按“command1”的时候选定第二行(高亮),如何操作?的主要内容,如果未能解决你的问题,请参考以下文章

在vb net中,如何猎取和修改已选定的某一项的值?

VB 如何让ListView选中的内容显示在Textbox中

如何在 Visual Basic 6 ListView 上进行多列排序?

如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)

如何将选定列和行中的DataGridView值插入ListView?

Delphi的TListView控件拖放选定行操作