Sdílet prostřednictvím


Zobrazení seznamu

Ovládací ListView prvek poskytuje infrastrukturu pro zobrazení sady datových položek pomocí jiného rozložení nebo zobrazení. Můžete například chtít zobrazit datové položky v tabulce a také seřadit její sloupce.

Odvozeno ListView od ListBox. Obvykle jsou jeho položky členy kolekce dat a jsou reprezentovány jako ListViewItem objekty. A ListViewItem je ContentControl a může obsahovat pouze jeden podřízený prvek. Tento podřízený prvek však může být libovolný vizuální prvek.

Snímek obrazovky zobrazující ListView s výstupem GridView zobrazující informace o souboru

Poznámka:

Typy odkazované v tomto článku jsou k dispozici v části Odkaz na kód .

Následující tabulka obsahuje seznam běžných úloh pro práci s ovládacím prvku ListView:

Title Description
Řazení sloupce GridView po kliknutí na záhlaví Zjistěte, jak seřadit sloupec GridView při kliknutí na záhlaví.
Vytvoření vlastního režimu zobrazení pro ListView Zjistěte, jak vytvořit vlastní režim zobrazení pro ListView.
Použití šablon k vytvoření stylu Objektu ListView, který používá GridView Naučte se používat šablony k formátování ListView, který používá GridView.
Vytvoření stylu pro přetaženou záhlaví sloupce GridView Zjistěte, jak vytvořit styl pro přetaženou záhlaví sloupce GridView.
Zobrazení obsahu ListView pomocí GridView Naučte se zobrazit obsah ListView pomocí GridView.
Použití triggerů ke stylování vybraných položek v ListView Naučte se používat triggery ke stylu vybraných položek v ListView.
Vytvoření ListViewItems pomocí CheckBoxu Zjistěte, jak vytvořit ListViewItems pomocí CheckBoxu.
Zobrazení dat pomocí GridViewRowPresenter Zjistěte, jak zobrazit data pomocí GridViewRowPresenter.
Seskupte položky v Objektu ListView, který implementuje GridView Zjistěte, jak seskupit položky v Objektu ListView, který implementuje GridView.
Stylování řádku v ListView, který implementuje GridView Naučte se stylovat řádek v Objektu ListView, který implementuje GridView.
Změna vodorovného zarovnání sloupce v zobrazení ListView Zjistěte, jak změnit vodorovné zarovnání sloupce v zobrazení ListView.
Zpracování události MouseDoubleClick pro každou položku v ListView Zjistěte, jak zpracovat událost MouseDoubleClick pro každou položku v objektu ListView.

Styly a šablony

Výchozí nastavení ControlTemplate můžete upravit tak, aby ovládací prvek získal jedinečný vzhled. Další informace najdete v tématu Co jsou styly a šablony? a Jak vytvořit šablonu pro ovládací prvek.

Vlastnost obsahu

Ovládací ListView prvek používá Items vlastnost jako jeho vlastnost obsahu. Tato vlastnost umožňuje zadat položky zobrazené v ovládacím prvku.

Součástky

Ovládací ListView prvek nedefinuje žádné pojmenované části šablony.

Při vytváření ControlTemplate pro ListView může vaše šablona obsahovat ItemsPresenter uvnitř ScrollViewer. Zobrazuje ItemsPresenter každou položku v ovládacím prvku ListView; ScrollViewer umožňuje posouvání v ovládacím prvku. ItemsPresenter Pokud není přímým dítětem ScrollViewer, musíte dát ItemsPresenter jméno, ItemsPresenter.

Vizuální stavy

Následující tabulka uvádí vizuální stavy ListView ovládacího prvku.

Název VisualState Název skupiny VisualStateGroup Description
Valid StavyOvěření Ovládací prvek je platný a nemá žádné chyby ověření.
Neplatný fokus StavyOvěření Ovládací prvek má chybu validace a klávesnicový fokus.
NeplatnýBezZaostření StavyOvěření Ovládací prvek má chybu ověření, ale nemá zaměření klávesnice.

Následující tabulka uvádí stavy ListViewItem ovládacího prvku.

Název VisualState Název skupiny VisualStateGroup Description
Normální CommonStates Výchozí stav.
Disabled CommonStates Ovládací prvek je zakázaný.
Mouseover CommonStates Ukazatel myši je nad ovládacím prvku.
Focused FocusStates Ovládací prvek má fokus klávesnice.
Nezaměřený FocusStates Ovládací prvek nemá fokus klávesnice.
Vybráno SelectionStates Položka je aktuálně vybraná.
Nevybráno SelectionStates Položka není vybraná.
VybránoMimoFokus SelectionStates Položka je vybraná, ale nemá fokus klávesnice.
Valid StavyOvěření Ovládací prvek je platný a nemá žádné chyby ověření.
Neplatný fokus StavyOvěření Ovládací prvek má chybu validace a klávesnicový fokus.
NeplatnýBezZaostření StavyOvěření Ovládací prvek má chybu ověření, ale nemá zaměření klávesnice.

Režimy zobrazení

Chcete-li určit režim zobrazení pro obsah ListView ovládacího prvku, nastavte View vlastnost. Jeden režim zobrazení, který windows Presentation Foundation (WPF) poskytuje je GridView, který zobrazuje kolekci datových položek v tabulce, která má přizpůsobitelné sloupce.

Následující příklad ukazuje, jak definovat GridView pro ListView ovládací prvek, který zobrazuje informace o zaměstnanci.


<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">

    <ListView.View>

        <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Employee Information">

            <GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" Header="First Name" Width="100"/>

            <GridViewColumn DisplayMemberBinding="{Binding Path=LastName}" Width="100">
                <GridViewColumnHeader>Last Name
                    <GridViewColumnHeader.ContextMenu>
                        <ContextMenu MenuItem.Click="LastNameCM_Click" Name="LastNameCM">
                            <MenuItem Header="Ascending" />
                            <MenuItem Header="Descending" />
                        </ContextMenu>
                    </GridViewColumnHeader.ContextMenu>
                </GridViewColumnHeader>
            </GridViewColumn>

            <GridViewColumn DisplayMemberBinding="{Binding Path=EmployeeNumber}" Header="Employee No." Width="100"/>
        </GridView>

    </ListView.View>
</ListView>

Vlastní režim zobrazení můžete vytvořit definováním třídy, která dědí z ViewBase třídy. Třída ViewBase poskytuje infrastrukturu, kterou potřebujete k vytvoření vlastního zobrazení. Další informace o tom, jak vytvořit vlastní zobrazení, naleznete v tématu Vytvoření vlastního režimu zobrazení pro ListView.

Režimy zobrazení pro sdílení

Dva ListView ovládací prvky nemůžou současně sdílet stejný režim zobrazení. Pokud se pokusíte použít stejný režim zobrazení s více ovládacími ListView prvky, dojde k výjimce. Chcete-li určit režim zobrazení, který může být současně používán více než jedním ListView, použijte šablony nebo styly.

Datová vazba

Chcete-li určit položky pro ovládací prvek ListView, použijte vlastnosti Items a ItemsSource. Následující příklad nastaví ItemsSource vlastnost na kolekci dat s názvem EmployeeInfoDataSource.

<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">

V objektech GridViewGridViewColumn jsou objekty vázány na zadaná datová pole. Následující příklad vytvoří vazbu objektu GridViewColumn na datové pole zadáním Binding vlastnosti DisplayMemberBinding .

GridViewColumn gvc1 = new GridViewColumn();
gvc1.DisplayMemberBinding = new Binding("FirstName");
gvc1.Header = "FirstName";
gvc1.Width = 100;
Dim gvc1 As New GridViewColumn()
gvc1.DisplayMemberBinding = New Binding("FirstName")
gvc1.Header = "FirstName"
gvc1.Width = 100
<GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" Header="First Name" Width="100"/>

Můžete také zadat Binding jako součást DataTemplate definice, kterou použijete ke stylu buněk ve sloupci. V následujícím příkladu DataTemplate identifikovaný s ResourceKey nastaví Binding pro GridViewColumn. Všimněte si, že tento příklad nedefinuje DisplayMemberBinding, protože jeho definice má přednost před CellTemplate.

<DataTemplate x:Key="myCellTemplateMonth">
  <DockPanel>
    <TextBlock Foreground="DarkBlue" HorizontalAlignment="Center">
      <TextBlock.Text>
        <Binding Path="Month"/>
      </TextBlock.Text>
    </TextBlock>
  </DockPanel>
</DataTemplate>
<GridViewColumn Header="Month" Width="80"
      CellTemplate="{StaticResource myCellTemplateMonth}"/>

Styling ListView – ovládací prvky

Ovládací ListView prvek obsahuje ListViewItem objekty, které představují datové položky, které jsou zobrazeny. K definování obsahu a stylu datových položek můžete použít následující vlastnosti:

Chcete-li zabránit problémům se zarovnáním mezi buňkami v objektu GridView, nepoužívejte ItemContainerStyle k nastavení vlastností ani nepřidávejte obsah, který má vliv na šířku položky v objektu ListView. Například k problému zarovnání může dojít při nastavení Margin vlastnosti v objektu ItemContainerStyle. Chcete-li zadat vlastnosti nebo definovat obsah, který ovlivňuje šířku položek v objektu GridView, použijte vlastnosti GridView třídy a jeho související třídy, například GridViewColumn. Další informace o použití GridView a jejích podpůrných tříd naleznete v tématu GridView Overview.

Pokud definujete ItemContainerStyle ovládací ListView prvek a také definujete ItemTemplate, musíte zahrnout ContentPresenter do stylu, aby ItemTemplate správně fungoval.

Nepoužívejte vlastnosti HorizontalContentAlignment a VerticalContentAlignment pro zobrazení obsahu ListView pomocí GridView. Chcete-li určit zarovnání obsahu ve sloupci GridView, definujte CellTemplate.

Referenční příručka kódu

Na následující objekty se odkazuje v tomto článku:

  • EmployeeInfoDataSource shromažďování dat. Pokud používáte visual basic .NET, je prvek deklarován mírně odlišně od toho, Window co vidíte v ukázkovém kódu:

    <Window x:Class="SDKSample.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Loaded="OnLoad"
            xmlns:ds="clr-namespace:SDKSample">
    
        <Window.Resources>
            <ObjectDataProvider x:Key="EmployeeInfoDataSource" ObjectType="{x:Type ds:myEmployees}" />
        </Window.Resources>
    
  • EmployeeInfo třída, která se používá jako typ pro EmployeeInfoDataSource shromažďování dat.

    public class EmployeeInfo
    {
        private string _firstName;
        private string _lastName;
        private string _employeeNumber;
    
        public string FirstName
        {
            get {return _firstName;}
            set {_firstName = value;}
        }
    
        public string LastName
        {
            get {return _lastName;}
            set {_lastName = value;}
        }
    
        public string EmployeeNumber
        {
            get {return _employeeNumber;}
            set {_employeeNumber = value;}
        }
    
        public EmployeeInfo(string firstname, string lastname, string empnumber)
        {
            _firstName = firstname;
            _lastName = lastname;
            _employeeNumber = empnumber;
        }
    }
    
    Public Class EmployeeInfo
        Private _firstName As String
        Private _lastName As String
        Private _employeeNumber As String
    
        Public Property FirstName() As String
            Get
                Return _firstName
            End Get
            Set(ByVal value As String)
                _firstName = value
            End Set
        End Property
    
        Public Property LastName() As String
            Get
                Return _lastName
            End Get
            Set(ByVal value As String)
                _lastName = value
            End Set
        End Property
    
        Public Property EmployeeNumber() As String
            Get
                Return _employeeNumber
            End Get
            Set(ByVal value As String)
                _employeeNumber = value
            End Set
        End Property
    
        Public Sub New(ByVal firstname As String, ByVal lastname As String, ByVal empnumber As String)
            _firstName = firstname
            _lastName = lastname
            _employeeNumber = empnumber
        End Sub
    End Class
    

Viz také