As sombras criam pistas visuais na interface, o que ajuda o cérebro humano a diferenciar o elemento da IU que o usuário vê. E, esta é a razão pela qual os designers de dispositivos móveis preferem incorporar sombras em seus designs.
A classe DropShadow fornece meios de criar uma sombra configurável que pode ser aplicada a um Layout .
public class DropShadow : BindableObject
{
public static readonly BindableProperty RadiusProperty = BindableProperty.Create(
nameof(Radius), typeof(double), typeof(DropShadow), 10.0d);
public double Radius
{
get => (double)GetValue(RadiusProperty);
set => SetValue(RadiusProperty, value);
}
public static readonly BindableProperty ColorProperty = BindableProperty.Create(
nameof(Color), typeof(Color), typeof(DropShadow), Color.Black);
public Color Color
{
get => (Color)GetValue(ColorProperty);
set => SetValue(ColorProperty, value);
}
public static readonly BindableProperty OffsetProperty = BindableProperty.Create(
nameof(Offset), typeof(Point), typeof(DropShadow), new Point(1, 1));
public Point Offset
{
get => (Point)GetValue(OffsetProperty);
set => SetValue(OffsetProperty, value);
}
public static readonly BindableProperty OpacityProperty = BindableProperty.Create(
nameof(Opacity), typeof(double), typeof(DropShadow), 1.0d);
public double Opacity
{
get => (double)GetValue(OpacityProperty);
set => SetValue(OpacityProperty, value);
}
}
Vamos ver um exemplo usando C #, XAML e CSS.
var layout = new Grid();
var shadow = new DropShadow ();
shadow.Radius = 12;
shadow.Color = Color.Red;
shadow.Offset = new Point (12, 18);
shadow.Opacity = 0.75d;
layout.Shadow = shadow;
<Grid>
<Grid.Shadow>
<DropShadow
Radius="12"
Color="Red"
Offset="12, 18"
Opacity="0.75" />
</Grid.Shadow>
</Grid>
box-shadow: 12px 18px 12px 12px red;
Já temos sombras em alguns dos layouts Xamarin.Forms. A propriedade HasShadow de Frame se tornaria obsoleta (ela ainda poderia ser usada, embora o uso da propriedade Shadow fosse recomendado).
Nesta especificação, adicionamos sombras aos diferentes layouts de Xamarin.Forms. Controles específicos, como um rótulo, não se enquadram no escopo (eles podem vir mais tarde).
Parece ótimo!
Incrível! Eu realmente gostaria de ver esse recurso. No entanto, acho que podemos aproveitar a oportunidade para melhorar isso um pouco mais adicionando recursos de sombra gradiente.
Como @jsuarezruiz mencionou aqui: https://github.com/dotnet/maui/issues/11
Minha recomendação é aprimorar a propriedade "Color" para usar os novos "Brushes" para gradientes e cores sólidas.
<Grid>
<Grid.Shadow>
<DropShadow
Radius="12"
Offset="12, 18"
Opacity="0.75">
<DropShadow.Color>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1.0" />
</LinearGradientBrush>
</DropShadow.Color>
</DropShadow>
</Grid.Shadow>
</Grid>
O que você acha?
Pode ser ótimo adicionar várias sombras para design neuromórfico.
Estas são as coisas da nova moda ...
Comentários muito úteis
Incrível! Eu realmente gostaria de ver esse recurso. No entanto, acho que podemos aproveitar a oportunidade para melhorar isso um pouco mais adicionando recursos de sombra gradiente.
Como @jsuarezruiz mencionou aqui: https://github.com/dotnet/maui/issues/11
Minha recomendação é aprimorar a propriedade "Color" para usar os novos "Brushes" para gradientes e cores sólidas.
Amostra
O que você acha?