Megosztás a következőn keresztül:


Expander

A Kibontás vezérlővel megjelenítheti vagy elrejtheti a kevésbé fontos tartalmakat, amelyek egy mindig látható elsődleges tartalomhoz kapcsolódnak. Az fejlécben lévő elemek mindig láthatók. A felhasználó a fejléc használatával kibonthatja és összecsukhatja a Tartalom területet, ahol a másodlagos tartalom megjelenik. A tartalomterület kibontásakor más felhasználói felületi elemeket is kitol az útból; nem fedi át a többi felhasználói felületet. A Expander kitágulhat felfelé vagy lefelé.

A Header és a Content területek bármilyen tartalmat tartalmazhatnak, az egyszerű szövegtől az összetett UI elrendezésekig. A vezérlő használatával például további lehetőségeket jeleníthet meg egy elemhez.

Összecsukott kibomló, amelyet először kibontottak, majd ismét összecsuktak. A Fejléc szövege:

Ez a megfelelő vezérlő?

Használjon olyankor, Expander amikor bizonyos elsődleges tartalomnak mindig láthatónak kell lennie, de előfordulhat, hogy a kapcsolódó másodlagos tartalom el van rejtve, amíg szükséges. Ezt a felhasználói felületet általában akkor használják, ha a megjelenítési terület korlátozott, és amikor az információk vagy beállítások csoportosíthatók. A másodlagos tartalom elrejtése, amíg szükség nem lesz rá, segíthet a felhasználót az alkalmazás legfontosabb részeire összpontosítani.

Kibővítő létrehozása

WinUI 3 Katalógus ikon A WinUI 3 Katalógus alkalmazás interaktív példákat tartalmaz a WinUI vezérlőire és funkcióira. Kérje le az alkalmazást a Microsoft Áruházból vagy keresse meg a forráskódot a GitHub webhelyen.

Ez a példa bemutatja, hogyan hozhat létre egyszerű kibontót az alapértelmezett stílussal. A Fejléc tulajdonság határozza meg a mindig látható elemet. A Content tulajdonság határozza meg az összecsukható és kibontható elemet. Ez a példa egy olyan Expander-t készít, amely hasonló az előző ábrához.

<Expander Header="This text is in the header"
               Content="This is in the content"/>

Tartalom kibontása

Egy objektum Tartalom tulajdonsága Expander bármilyen típusú objektum lehet, de általában karakterlánc vagy UIElement. A tulajdonság beállításáról Content további információt a ContentControl osztály Megjegyzések szakaszában talál.

Összetett, interaktív felhasználói felületet használhat a Expandertartalmaként, beleértve a szülő Expander tartalmában lévő beágyazott Expander vezérlőket, ahogyan itt látható.

Nyitott kibontó, amelynek tartalmában négy kiterjesztő vezérlő található. Mindegyik beágyazott vezérlő fejlécében rádiógomb és szöveg található

Tartalom igazítása

A tartalom igazításához állítsa be a HorizontalContentAlignment és a VerticalContentAlignment tulajdonságokat a Expander vezérlőn. A tulajdonságok beállításakor az igazítás csak a kibontott tartalomra vonatkozik, a fejlécre nem.

Kibontó méretének szabályozása

Alapértelmezés szerint a fejléc - és tartalomterületek automatikusan méretezhetők a tartalomnak megfelelően. Fontos, hogy a megfelelő technikákkal szabályozni lehessen a méretét, hogy elkerülje a Expander nemkívánatos megjelenést vagy viselkedést.

Szélesség

Ha a tartalom szélesebb, mint a fejléc, a fejléc szélessége a kibontott tartalomterülethez igazodik, és a tartalomterület összecsukásakor csökken. Ha meg szeretné akadályozni, hogy a vezérlőelem szélessége a kibontott vagy összecsukott állapotban megváltozjon, megadhat egy explicit szélességet, vagy ha a vezérlő egy panel gyermekeleme, állítsa a HorizontalAlignment értéket Stretch értékre, és hagyja, hogy az elrendezési panel szabályozza a méretezést.

Itt egy sor kapcsolódó Expander vezérlőt helyezünk el a StackPanelben. Az egyes HorizontalAlignment a Expander-ban a StackPanel-re van állítva egy Stretch használatával a StackPanel, és a szélessége határozza meg a StackPanel vezérlők szélességét.

<StackPanel x:Name="ExpanderStack" MaxWidth="600">
    <StackPanel.Resources>
        <Style TargetType="Expander">
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </StackPanel.Resources>
    <Expander Header="Choose your crust"> ... </Expander>
    <Expander Header="Choose your sauce"> ... </Expander>
    <Expander Header="Choose your toppings"> ... </Expander>
 </StackPanel>

Három kiterjesztő vezérlőelem függőlegesen halmozva, azonos szélességű

Magasság

Ne adjon meg a Expander. Ha ezt választja, a vezérlő akkor is lefoglalja ezt a helyet, ha a tartalomterület össze van csukva, ami ellentétes a Expandercéljával. A kibontott tartalomterület méretének megadásához állítsa be a méreteket a Expandertartalmán. Szükség esetén korlátozhatja a tartalom Height-ját, és görgethetővé teheti a tartalmat.

Görgethető tartalom

Ha a tartalom túl nagy a tartalomterület méretéhez, görgethetővé teheti a tartalmat ScrollViewerrel . A Expander vezérlő nem biztosít automatikusan görgetési képességet.

Amikor a ScrollViewer-t elhelyezi a Expander tartalomban, állítsa be a ScrollViewer vezérlőelem magasságát a tartalomterülethez szükséges magasságra. Ha ehelyett a magassági dimenziót állítja be a tartalomon belül, nem ismeri fel ezt a ScrollViewerbeállítást, ScrollViewer ezért nem biztosít görgethető tartalmat.

Az alábbi példa bemutatja, hogyan hozhat létre olyan vezérlőt Expander , amely tartalomként görgethető szöveget tartalmaz.

<Expander Header="Expander with scrollable content">
    <ScrollViewer MaxHeight="200">
        <Grid>
            <TextBlock TextWrapping="Wrap">
                Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
                sed do eiusmod tempor incididunt ut labore et dolore magna
                aliqua. Ut enim ad minim veniam, quis nostrud exercitation
                ullamco laboris nisi ut aliquip ex ea commodo consequat.
                Duis aute irure dolor in reprehenderit in voluptate velit
                esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
                occaecat cupidatat non proident, sunt in culpa qui officia
                deserunt mollit anim id est laborum.
            </TextBlock>
        </Grid>
    </ScrollViewer>
</Expander>

Kibontó, amely tartalmaként görgethető szöveget tartalmaz

A tartalomterület kibontása és összecsukása

Alapértelmezés szerint a Expander összecsukott állapotban van és lefelé nyílik.

<Expander IsExpanded="True" ExpandDirection="Up">

Egy Expander programvezérelten kibontott vagy összecsukott lesz a IsExpanded tulajdonság beállításával, vagy a Header-val/-vel való interakció révén; nem lehet „light dismiss” funkcióval bezárni.

Jótanács

Az átmeneti felhasználói felület( például egy Flyout vagy egy ComboBoxnyitott legördülő listája) bezárul, amikor rákattint vagy koppint azon kívülre. Ezt nevezik külső kattintással bezárásnak. A Expander tartalomterülete nem tekinthető átmenetinek, és nem fedi át a többi felhasználói felületet, így nem támogatja a könnyű elbocsátást.

A Kibővítés és Összeomlás eseményeket is kezelheti, hogy egy műveletet végezzen, amikor a tartalom megjelenik vagy el van rejtve. Íme néhány példa ezekre az eseményekre.

Esemény bővítése

Ebben a példában van egy kibontó csoportod, és azt szeretné, ha egyszerre csak egy lenne nyitva. Amikor a felhasználó megnyit egy Expander elemet, te kezeled a Kibontás eseményt, és összecsukod a csoport összes Expander vezérlőelemét, kivéve azt, amelyikre a felhasználó kattintott.

Caution

Az alkalmazástól és a felhasználói élménytől függően kényelmes lehet automatikusan összecsukni Expander a vezérlőket, amikor a felhasználó egy másikat bővít ki. Ez azonban el is távolítja az irányítást a felhasználótól. Ha a viselkedés hasznos lehet, fontolja meg, hogy a felhasználó által egyszerűen beállítható beállítás legyen.

<StackPanel x:Name="ExpanderStack">
    <Expander Header="Choose your crust"
                   Expanding="Expander_Expanding"> ... </Expander>
    <Expander Header="Choose your sauce"
                   Expanding="Expander_Expanding"> ... </Expander>
    <Expander Header="Choose your toppings"
                   Expanding="Expander_Expanding"> ... </Expander>
 </StackPanel>
// Let the user opt out of custom behavior.
private bool _autoCollapse = true;

private void Expander_Expanding(muxc.Expander sender, 
                                muxc.ExpanderExpandingEventArgs args)
{
    if (_autoCollapse == true)
    {
        foreach (muxc.Expander ex in ExpanderStack.Children)
        {
            if (ex != sender && ex.IsExpanded)
                ex.IsExpanded = false;
        }
    }
}

Összeomlott esemény

Ebben a példában az összecsukott eseményt kezeli, és kitölti a Header-t a Content-ban/-ben kiválasztott lehetőségek összegzésével.

Ez a kép a Expander-t ábrázolja kibontott tartalommal és kiválasztott beállításokkal.

Egy kibontott vezérlő a tartalomterületen megjelenő kijelölt opciókkal

Összecsukott állapotban a kijelölt beállítások összegzése a fejlécben jelenik meg, így a felhasználó a Expandermegnyitása nélkül is láthatja őket.

Összecsukott Kibontó vezérlőelem a fejlécben összefoglalt kiválasztott beállításokkal

<Expander IsExpanded="True"
        Expanding="Expander_Expanding"
        Collapsed="Expander_Collapsed">
    <Expander.Header>
        <Grid>
            <TextBlock Text="Choose your crust"/>
            <TextBlock x:Name="tbCrustSelections"
                       HorizontalAlignment="Right"
                       Style="{StaticResource CaptionTextBlockStyle}"/>
        </Grid>
    </Expander.Header>
    <StackPanel Orientation="Horizontal">
        <RadioButtons x:Name="rbCrustType" SelectedIndex="0">
            <x:String>Classic</x:String>
            <x:String>Whole wheat</x:String>
            <x:String>Gluten free</x:String>
        </RadioButtons>
        <RadioButtons x:Name="rbCrustStyle" SelectedIndex="0" 
                           Margin="48,0,0,0">
            <x:String>Regular</x:String>
            <x:String>Thin</x:String>
            <x:String>Pan</x:String>
            <x:String>Stuffed</x:String>
        </RadioButtons>
    </StackPanel>
</Expander>
private void Expander_Collapsed(muxc.Expander sender, 
                                muxc.ExpanderCollapsedEventArgs args)
{
    // Update the header with options selected in the content.
    tbCrustSelections.Text = rbCrustType.SelectedItem.ToString() +
        ", " + rbCrustStyle.SelectedItem.ToString();
}

Könnyű stílus

Módosíthatja az alapértelmezett beállítást Style , és ControlTemplate egyedi megjelenést adhat a vezérlőnek. A rendelkezésre álló témaerőforrások listájáért tekintse meg az Expander API-dokumentumok Vezérlőstílus és sablon szakaszát. További információkért tekintse meg a Stílusvezérlők cikk Könnyű súlyú stílus című szakaszát.

Recommendations

  • Amikor a megjelenítési hely korlátozott, használjon Expander-t, és előfordulhat, hogy bizonyos másodlagos tartalom rejtve marad, amíg a felhasználó azt nem kéri.

Példakódok

Ez az XAML létrehozza a cikk más részeiben látható vezérlők csoportját Expander . Az Expanding és Collapsed eseménykezelők kódja is megjelenik az előző szakaszokban.

<StackPanel x:Name="ExpanderStack" MaxWidth="600">
    <StackPanel.Resources>
        <Style TargetType="Expander">
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </StackPanel.Resources>
    <Expander IsExpanded="True"
                   Expanding="Expander_Expanding"
                   Collapsed="Expander_Collapsed">
        <Expander.Header>
            <Grid>
                <TextBlock Text="Choose your crust"/>
                <TextBlock x:Name="tbCrustSelections" 
                           HorizontalAlignment="Right"
        Style="{StaticResource CaptionTextBlockStyle}"/>
            </Grid>
        </Expander.Header>
        <StackPanel Orientation="Horizontal">
            <RadioButtons x:Name="rbCrustType" SelectedIndex="0">
                <x:String>Classic</x:String>
                <x:String>Whole wheat</x:String>
                <x:String>Gluten free</x:String>
            </RadioButtons>
            <RadioButtons x:Name="rbCrustStyle" SelectedIndex="0" 
                   Margin="48,0,0,0">
                <x:String>Regular</x:String>
                <x:String>Thin</x:String>
                <x:String>Pan</x:String>
                <x:String>Stuffed</x:String>
            </RadioButtons>
        </StackPanel>
    </Expander>
    
    <Expander Header="Choose your sauce" Margin="24"
            Expanding="Expander_Expanding">
        <RadioButtons SelectedIndex="0" MaxColumns="2">
            <x:String>Classic red</x:String>
            <x:String>Garlic</x:String>
            <x:String>Pesto</x:String>
            <x:String>Barbecue</x:String>
        </RadioButtons>
    </Expander>

    <Expander Header="Choose your toppings"
                   Expanding="Expander_Expanding">
        <StackPanel>
            <Expander>
                <Expander.Header>
                    <RadioButton GroupName="Toppings" Content="House special"/>
                </Expander.Header>
                <TextBlock Text="Cheese, pepperoni, sausage, black olives, mushrooms"
                           TextWrapping="WrapWholeWords"/>
            </Expander>
            <Expander>
                <Expander.Header>
                    <RadioButton GroupName="Toppings" Content="Vegetarian"/>
                </Expander.Header>
                <TextBlock Text="Cheese, mushrooms, black olives, green peppers, artichoke hearts"
                           TextWrapping="WrapWholeWords"/>
            </Expander>
            <Expander>
                <Expander.Header>
                    <RadioButton GroupName="Toppings" Content="All meat"/>
                </Expander.Header>
                <TextBlock Text="Cheese, pepperoni, sausage, ground beef, salami"
                           TextWrapping="WrapWholeWords"/>
            </Expander>
            <Expander>
                <Expander.Header>
                    <RadioButton GroupName="Toppings" Content="Choose your own"/>
                </Expander.Header>
                <StackPanel Orientation="Horizontal">
                    <StackPanel>
                        <CheckBox Content="Cheese"/>
                        <CheckBox Content="Pepperoni"/>
                        <CheckBox Content="Sausage"/>
                    </StackPanel>
                    <StackPanel>
                        <CheckBox Content="Ground beef"/>
                        <CheckBox Content="Salami"/>
                        <CheckBox Content="Mushroom"/>
                    </StackPanel>
                    <StackPanel>
                        <CheckBox Content="Black olives"/>
                        <CheckBox Content="Green peppers"/>
                        <CheckBox Content="Artichoke hearts"/>
                    </StackPanel>
                </StackPanel>
            </Expander>
        </StackPanel>
    </Expander>
</StackPanel>