Condividi tramite


Ombreggiature nelle app di Windows

Windows app usano le ombreggiature per esprimere profondità e aggiungere gerarchia visiva. Le ombreggiature consentono di creare un effetto di profondità, orientando l'attenzione dell'utente verso gli elementi più importanti nell'interfaccia utente.

L'ombra è uno dei modi in cui un utente percepisce l'elevazione. La luce sopra un oggetto elevato crea un'ombra sulla superficie sottostante. Più alto è l'oggetto, più grande e più morbida diventa l'ombreggiatura. Gli oggetti elevati nella tua UI non devono avere ombre, ma aiutano a creare l'apparenza di elevazione.

Nelle app Windows, le ombre devono essere usate in modo intenzionale piuttosto che estetico. L'uso di troppe ombreggiature ridurrà o eliminerà la capacità dell'ombreggiatura di concentrarsi sull'utente.

Se usi controlli standard, le ombreggiature sono già incorporate nell'interfaccia utente. Tuttavia, puoi includere manualmente le ombreggiature nell'interfaccia utente usando themeShadow o le API DropShadow .

ThemeShadow

Il tipo ThemeShadow può essere applicato a qualsiasi elemento XAML per disegnare le ombreggiature in modo appropriato in base alle coordinate x, y e z.

  • Applica le ombreggiature agli elementi in base al valore di profondità z, simulando la profondità.
  • Mantiene le ombre coerenti in tutte le applicazioni grazie all'estetica dell'ombra.

Ecco come ThemeShadow è stato implementato in un MenuFlyout. MenuFlyout ha un'ombreggiatura incorporata con una profondità di 32px applicata al menu principale e a tutti i menu annidati.

Uno Screenshot di ThemeShadow applicato a un MenuFlyout con tre menu annidati aperti.

ThemeShadow nei controlli comuni

I controlli comuni seguenti useranno automaticamente ThemeShadow per proiettare ombre con una profondità di 32 pixel, a meno che non diversamente specificato.

ThemeShadow nei popup

Spesso l'interfaccia utente dell'app usa un popup per gli scenari in cui è necessaria l'attenzione e l'azione rapida dell'utente. Questi sono ottimi esempi quando è consigliabile usare shadow per creare una gerarchia nell'interfaccia utente dell'app.

ThemeShadow proietta automaticamente ombre quando applicato a un qualsiasi elemento XAML all'interno di un popup. Proietterà ombre sul contenuto di sfondo dell'app dietro di esso e su tutti gli altri popup aperti sotto di esso.

Per usare ThemeShadow con Popup, usa la Shadow proprietà per applicare themeShadow a un elemento XAML. Elevare quindi l'elemento da altri elementi dietro di esso, ad esempio usando il componente z della Translation proprietà . Per la maggior parte dei popup dell'interfaccia utente, l'elevazione predefinita consigliata rispetto al contenuto dello sfondo dell'app è di 32 pixel effettivi.

Questo esempio mostra un rettangolo in un popup che proietta un'ombra sul contenuto di sfondo dell'app e su qualsiasi altro popup dietro di esso.

<Popup>
    <Rectangle x:Name="PopupRectangle" Fill="Lavender" Height="48" Width="96">
        <Rectangle.Shadow>
            <ThemeShadow />
        </Rectangle.Shadow>
    </Rectangle>
</Popup>
// Elevate the rectangle by 32px
PopupRectangle.Translation += new Vector3(0, 0, 32);

Un singolo popup rettangolare con un'ombreggiatura.

Disabilitazione di ThemeShadow predefinito nei controlli rimovibili personalizzati

I controlli basati su Flyout, DatePickerFlyout, MenuFlyout o TimePickerFlyout usano automaticamente ThemeShadow per eseguire il cast di un'ombreggiatura.

Se l'ombreggiatura predefinita non appare corretta nel contenuto del controllo, è possibile disabilitarla impostando la proprietà IsDefaultShadowEnabled sull'oggetto FlyoutPresenter associato.

<Flyout>
    <Flyout.FlyoutPresenterStyle>
        <Style TargetType="FlyoutPresenter">
            <Setter Property="IsDefaultShadowEnabled" Value="False" />
        </Style>
    </Flyout.FlyoutPresenterStyle>
</Flyout>

ThemeShadow in altri elementi

Annotazioni

A partire da Windows 11, se l'app è destinata a Windows SDK versione 22000 o successiva, la raccolta Receivers viene ignorata. Tuttavia, non ci saranno errori e l'ombreggiatura continua a funzionare.

In generale, è consigliabile considerare attentamente l'uso dell'ombreggiatura e limitarne l'uso ai casi in cui introduce una gerarchia visiva significativa. Tuttavia, è possibile proiettare un'ombra da qualsiasi elemento dell'interfaccia utente per scenari avanzati che lo richiedono.

Per proiettare un'ombra da un elemento XAML che non si trova in un Popup, devi specificare esplicitamente gli altri elementi che possono ricevere l'ombra nella raccolta ThemeShadow.Receivers. I ricevitori non possono essere un antenato del caster nell'albero visivo.

Questo esempio mostra due rettangoli che proiettano ombre su una griglia dietro di essa.

<Grid>
    <Grid.Resources>
        <ThemeShadow x:Name="SharedShadow" />
    </Grid.Resources>

    <Grid x:Name="BackgroundGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" />

    <Rectangle x:Name="Rectangle1" Height="100" Width="100" Fill="Turquoise" Shadow="{StaticResource SharedShadow}" />

    <Rectangle x:Name="Rectangle2" Height="100" Width="100" Fill="Turquoise" Shadow="{StaticResource SharedShadow}" />
</Grid>
/// Add BackgroundGrid as a shadow receiver and elevate the casting buttons above it
SharedShadow.Receivers.Add(BackgroundGrid);

Rectangle1.Translation += new Vector3(0, 0, 16);
Rectangle2.Translation += new Vector3(120, 0, 32);

Due rettangoli turchesi uno accanto all'altro, entrambi con ombre.

Ombra esterna

DropShadow non fornisce valori shadow predefiniti ed è necessario specificarli manualmente. Per le implementazioni di esempio, vedere la classe DropShadow .

Suggerimento

A partire da Windows 11, se l'app è destinata alla versione 22000 o successiva del Windows SDK, ThemeShadow si comporterà come un'ombra di sfondo. Se usi DropShadow, puoi invece usare ThemeShadow.

Quale ombreggiatura devo usare?

Proprietà ThemeShadow DropShadow
Min SDK SDK 18362 SDK 14393
Adattabilità NO
Personalizzazione NO
Sorgente luminosa None None
Supportato negli ambienti 3D Sì (mentre funziona in un ambiente 3D, le ombre vengono emulate). NO
  • Tenere presente che lo scopo dell'ombreggiatura è fornire una gerarchia significativa, non come un semplice trattamento visivo.
  • In genere, è consigliabile usare ThemeShadow, che fornisce valori di ombreggiatura coerenti.
  • Per problemi relativi alle prestazioni, limitare il numero di ombreggiature, usare altri trattamenti visivi o usare DropShadow.
  • Se sono disponibili scenari più avanzati per ottenere una gerarchia visiva, è consigliabile usare altri trattamenti visivi (ad esempio, colore). Se è necessaria l'ombreggiatura, usare DropShadow.