У меня есть пользовательское средство визуализации, чтобы иметь возможность изменять свойства слоя, который монтирует тень, однако этот кадр после отображения на экране, когда мне нужно изменить его размер, не "берет" тень вместе.Тень остается там, где я был раньше, я использую пользовательский рендерер, потому что нативная тень очень «сильная», и я не нашел способа ее изменить.
Любые предложения о том, чего не хватает, чтобы это было нормально?Я уже пытался перенести его в измененное свойство фрейма и снова выполнить рисование, но оно не было решено.
Пользовательский рендер:
public override void Draw(CGRect rect)
{
base.Draw(rect);
Layer.ShadowRadius = 3;
Layer.ShouldRasterize = true;
Layer.ShadowColor = UIColor.Gray.CGColor;
Layer.ShadowOffset = new CGSize(0, 1);
Layer.ShadowOpacity = 0.25f;
Layer.ShadowPath = UIBezierPath.FromRoundedRect(Layer.Bounds, Element.CornerRadius).CGPath;
Layer.MasksToBounds = false;
}
Cardfarme xaml:
<?xml version="1.0" encoding="utf-8" ?>
<customControls:CardFrame
x:Class="dragon.Views.UserControls.CardListUserControl"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:b="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"
xmlns:customControls="clr-namespace:dragon.CustomControls;assembly=dragon"
HasShadow="True"
MinimumHeightRequest="160">
<Frame
x:Name="ColoredFrame"
CornerRadius="3"
HasShadow="False">
<Frame Style="{StaticResource CardWhiteFrame}">
<StackLayout
x:Name="Teste"
HorizontalOptions="Fill"
Spacing="10"
Style="{StaticResource CardContentStacklayoutStyle}">
<StackLayout HorizontalOptions="Fill" Orientation="Horizontal">
<Label
x:Name="HeaderLabel"
Style="{StaticResource CardHeaderTextStyle}"
Text="{Binding HeaderText}" />
<Image
x:Name="ImgAbout"
Margin="0,5,0,15"
HorizontalOptions="EndAndExpand"
Source="about1.png" />
</StackLayout>
<ListView
x:Name="CardItemsList"
ItemsSource="{Binding ItemsList}"
SeparatorColor="LightGray"
VerticalOptions="StartAndExpand">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Margin="5,0,10,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label
Grid.Column="0"
HorizontalOptions="Start"
LineBreakMode="TailTruncation"
Text="{Binding .}"
TextColor="#333333"
VerticalOptions="Center" />
<Grid
Grid.Column="1"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand">
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding Path=BindingContext.RemoveCommand, Source={x:Reference CardItemsList}}" CommandParameter="{Binding .}" />
</Grid.GestureRecognizers>
<BoxView
x:Name="RemoveBoxView"
Grid.Column="1"
CornerRadius="2"
HeightRequest="3"
HorizontalOptions="Center"
VerticalOptions="Center"
WidthRequest="30"
Color="{StaticResource DefaultRedColor}" />
</Grid>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Entry
x:Name="EntryOfNewItemToInsert"
IsVisible="False"
Placeholder="Inserir novo item"
Text="{Binding NewItemToAdd}"
Unfocused="EntryOfNewItemToInsert_Unfocused">
<Entry.Behaviors>
<b:EventToCommandBehavior Command="{Binding InserNewItemCommand}" EventName="Unfocused" />
</Entry.Behaviors>
</Entry>
<Button
x:Name="Button"
Clicked="Button_Clicked"
Style="{StaticResource DefaultOrangeButtonStyle}"
Text="{Binding ButtonText}" />
</StackLayout>
</Frame>
</Frame>
</customControls:CardFrame>
Печать: ![enter image description here](https://i.stack.imgur.com/lXTYp.png)
На изображении у нас есть первая карта с элементами внутри списка, которая расширяет ее, а на другой карте - без изменений в списке(не нужно расширять) правильно, как следует, помня, что если нативная тень работает, и Android тоже работает, потому что к нему не применен пользовательский рендерер.