【发布时间】:2019-03-28 01:36:44
【问题描述】:
我有一个自定义渲染器能够更改挂载阴影的图层的属性,但是当我需要更改其大小时,此帧显示在屏幕上后并不会将阴影“带走”在一起。阴影保持在原来的位置,我使用自定义渲染器,因为原生阴影非常“强”,我还没有找到改变它的方法。
有什么建议可以让这是正常的吗?我已经尝试将它带到框架的 propertychanged 并让它再次进行 Draw 但它没有解决。
自定义渲染器:
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>
在图像中,我们有第一张卡片,其中包含列表中的项目,使其扩展,而在另一张卡片中,列表中没有更改(无需扩展)是正确的,请记住,如果本机阴影有效, Android 也可以正常工作,因为它没有应用自定义渲染器。
【问题讨论】:
标签: c# ios xaml xamarin.forms xamarin.ios