Nello script precedente abbiamo visto come utilizzare gli Style AppBarButtonStyle e i suoi derivati per visualizzare la maggior parte delle icone di una Windows Store App.
Qualora volessimo utilizzare un'icona personalizzata, non presente nel set degli Style, possiamo creare un nostro Style estendendo appunto AppBarButtonStyle.
Se analizziamo il VisualStateManager di AppBarButtonStyle possiamo vedere che nelle fasi di interazione, ad esempio PointerOver e Pressed, viene cambiato il valore della proprietà Foreground del ContentPresenter, il quale contiene l'oggetto che andiamo ad impostare nella proprietà Content del Button.
Per poter avere un'icona possiamo usare l'oggetto Path ma di quest'ultimo possiamo impostarne il colore con la proprietà Fill, anzichè Foreground. Per gestire questo scenario e per cambiare correttamente il colore durante le fasi di interazione possiamo creare uno Style come il seguente, nel quale sfruttiamo RelativeSource Mode=TemplatedParent nell'espressione di binding per trasferire le proprietà Foreground e Content nelle rispettive proprietà Fill e Data del Path.
<Style x:Key="PathAppBarButtonStyle" BasedOn="{StaticResource AppBarButtonStyle}" TargetType="ButtonBase"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Path Width="20" Height="20" Stretch="Uniform" Fill="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=TemplatedParent}}" Data="{Binding Path=Content, RelativeSource={RelativeSource Mode=TemplatedParent}}" /> </DataTemplate> </Setter.Value> </Setter> </Style>
In questo modo il suo utilizzo è estremamente semplice:
<Button Style="{StaticResource PathAppBarButtonStyle}" AutomationProperties.Name="Salva e.." Content="M14.0652215480804,14.7758959829807C14.3212740421295 ....." />
Ed ecco un esempio:
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Miglioramenti nelle performance di Angular 16
Generare token per autenicarsi sulle API di GitHub
Creare una libreria CSS universale: Clip-path
Migliorare l'organizzazione delle risorse con Azure Policy
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Limitare le richieste lato server con l'interactive routing di Blazor 8
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Generare un hash con SHA-3 in .NET
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Effettuare il refresh dei dati di una QuickGrid di Blazor
Gestire i dati con Azure Cosmos DB Data Explorer
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel