我有一个 Xamarin Android 应用程序,它使用选取器从值列表中进行选择。我一直在改变应用程序的风格,但遇到了选择器的问题。
虽然我可以设置 TextColor,但无法设置占位符文本的颜色。
在搜索帮助后,我实现了一个自定义渲染器,现在文本和占位符显示在正确的文本中。但是,以前当我触摸占位符文本时,会出现子对话框并显示所有项目,允许用户选择一个。现在我已经实现了自定义渲染器,子对话框仅显示最上面的两项,用户必须在单击“确定”之前滚动浏览它们。
我有两个问题:
- 至少,如何让子对话框再次显示完整列表?
- 是否可以设置项目列表对话框的背景和文本颜色?
XAML 看起来像这样:
<c:CustomPicker x:Name="DivisionList" Title="{x:Static prop:Resources.PickerDivision}"
SelectedIndexChanged="DivisionList_SelectedIndexChanged">
<Picker.Behaviors>
<b:RequiredPickerValidator x:Name="DivValidator" IsValid="{Binding Path=BindingContext.IsDivisionValid, Mode=OneWayToSource, Source={x:Reference contentPage}}" />
</Picker.Behaviors>
</c:CustomPicker>
CustomPicker类如下:
namespace <myapp>.Portable.Controls
{
public class CustomPicker : Picker
{
public Color PlaceholderColour
{
get { return (Color)App.Current.Resources["PlaceholderTextColour"]; }
}
public Color TextColour
{
get { return (Color)App.Current.Resources["LabelTextColour"]; }
}
public Color BackgroundColour
{
get { return (Color)App.Current.Resources["PaneBackgroundColour"]; }
}
}
}
客户渲染器是这样的:
[assembly: ExportRendererAttribute(typeof(CustomPicker), typeof(CustomPickerRenderer))]
namespace <myapp>.Droid.Controls.Renderers
{
public class CustomPickerRenderer : PickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
Control?.SetPadding(20, 20, 20, 20);
if (e.OldElement != null || e.NewElement != null)
{
var customPicker = e.NewElement as CustomPicker;
Android.Graphics.Color phCol = customPicker.PlaceholderColour.ToAndroid();
Android.Graphics.Color textCol = customPicker.TextColour.ToAndroid();
Android.Graphics.Color bgCol = customPicker.BackgroundColour.ToAndroid();
Control.SetBackgroundColor(bgCol);
Control.SetHintTextColor(phCol);
Control.SetTextColor(textCol);
}
}
}
}
提前谢谢了!
Picker popup before custom renderer:
Picker popup after custom renderer: