更改 Xamarin Forms for Windows Phone 8.1 中选取器控件的默认文本颜色
本文关键字:控件 选取 默认 颜色 文本 Forms Xamarin for Windows Phone 更改 | 更新日期: 2023-09-27 18:33:06
我正在使用 Xamarin 窗体选取器控件,需要设置文本颜色,但是没有这样的属性。我尝试制作一个自定义渲染器,它在 android 和 ios 中适合我(我最终重新绘制了控件(。在 wp8.1 平台中,没有 Draw 事件,呈现器中的控件本身似乎没有设置文本颜色的属性。我还尝试更改选取器绑定到的控件,但没有成功。
目前,我已经在PCL中创建了可绑定属性TextColor,该属性正在工作。我的渲染器的代码如下所示(我已经剥离了我所有的测试代码,只放置了基本代码,因为我还没有找到任何有用的东西,并且将我的代码放在上下文中只是为了让每个人都了解上下文(。另请注意,属性 Picker.TextColorProperty 不存在,是我想做的...
using Namespace.CustomControls;
using Namespace.WinPhone.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.WinPhone;
[assembly: ExportRendererAttribute(typeof(BindablePicker), typeof(BindablePickerRenderer))]
namespace Namspace.WinPhone.Renderers
{
public class BindablePickerRenderer : PickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
var picker = e.NewElement;
BindablePicker bp = (BindablePicker)this.Element;
if (this.Control != null)
{
var pickerStyle = new Style(typeof(Picker))
{
Setters = {
new Setter {Property = Picker.BackgroundColorProperty, Value = bp.BackgroundColor},
new Setter {Property = Picker.TextColorProperty, Value = bp.TextColor}
}
};
picker.Style = pickerStyle;
}
}
}
}
无论如何,我想知道是否有人可能对如何做到这一点有更多的了解,并且可以对我有所了解。
Picker
中没有您提到的TextColor
属性。
即使如此,我们仍然可以实现 更改WindowsPhone
的Picker
文本颜色 .
我假设您是从PickerRenderer
继承的,因为它在您的代码示例中丢失,并且我添加了一些额外的东西,因此这对其他人更有帮助:-
在PCL
中定义接口:-
public interface ICustomPicker2
{
Xamarin.Forms.Color MyBackgroundColor { get; set; }
Xamarin.Forms.Color MyTextColor { get; set; }
}
在PCL
中扩展Xamarin.Forms
Picker
:-
public class CustomPicker2
: Xamarin.Forms.Picker
, ICustomPicker2
{
public static readonly BindableProperty MyBackgroundColorProperty = BindableProperty.Create<CustomPicker2, Xamarin.Forms.Color>(p => p.MyBackgroundColor, default(Xamarin.Forms.Color));
public static readonly BindableProperty MyTextColorProperty = BindableProperty.Create<CustomPicker2, Xamarin.Forms.Color>(p => p.MyTextColor, default(Xamarin.Forms.Color));
public Xamarin.Forms.Color MyTextColor
{
get { return (Xamarin.Forms.Color)GetValue(MyTextColorProperty); }
set { SetValue(MyTextColorProperty, value); }
}
public Xamarin.Forms.Color MyBackgroundColor
{
get { return (Xamarin.Forms.Color)GetValue(MyBackgroundColorProperty); }
set { SetValue(MyBackgroundColorProperty, value); }
}
}
像在类库中这样创建WindowsPhone
渲染器:-
public class CustomPicker2Renderer
: PickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
var picker = e.NewElement;
CustomPicker2 bp = (CustomPicker2)this.Element;
if (this.Control != null)
{
var pickerStyle = new Style(typeof(Picker))
{
Setters = {
new Setter {Property = Picker.BackgroundColorProperty, Value = bp.MyBackgroundColor},
}
};
SetPickerTextColor(bp.MyTextColor);
picker.Style = pickerStyle;
}
}
private void SetPickerTextColor(Xamarin.Forms.Color pobjColor)
{
byte bytR = (byte)(pobjColor.R * 255);
byte bytG = (byte)(pobjColor.G * 255);
byte bytB = (byte)(pobjColor.B * 255);
byte bytA = (byte)(pobjColor.A * 255);
//
((System.Windows.Controls.Control)(((System.Windows.Controls.Panel)this.Control).Children[0])).Foreground = new SolidColorBrush(System.Windows.Media.Color.FromArgb(bytA, bytR, bytG, bytB));
}
请注意,如果您只想将文本颜色设置一次,以上就是您需要的。
但是,如果要在最初设置颜色后更改颜色,则需要收听属性更改并对其执行操作,如下所示:
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
//
if (e.PropertyName == "MyTextColor")
{
SetPickerTextColor((this.Element as CustomPicker2).MyTextColor);
}
}
您还需要从类库中导出渲染器:-
[assembly: ExportRendererAttribute(typeof(CustomPicker2), typeof(CustomPicker2Renderer))]