如何在 C# 代码隐藏中使用 XAML 中定义的属性
How to use properties defined in XAML in the C# code-behind
我有一个带有 C#
代码隐藏的 XAML
文档。
在 C#
class 中我定义了一些属性,然后我可以在 XAML
中设置:
public partial class MyClass : ContentView
{
public Color MyColor { get; set; }
public MyClass()
{
InitializeComponent()
//Here I want to use the color
}
}
<MyClass MyColor="Blue"/>
问题是从未设置 属性。当我尝试使用它时,它仍然具有默认值(白色)。
当我使用 BindableProperties
:
时也会发生同样的情况
public static readonly BindableProperty MyColorProperty = BindableProperty.Create(nameof(MyColor), typeof(Color), typeof(MyClass), Colors.White);
public Color MyColor
{
get => (Color)GetValue(MyColorProperty);
set => SetValue(MyColorProperty, value);
}
你应该怎么做?我想使用 XAML
在此元素实例上设置的属性,但它不起作用。
图片 c# 代码而不是 xaml 可能会有所帮助。两者是等价的
如果您的组件的使用看起来像:
var c = new MyClass();
c.MyColor = Color.Blue;
那么构造函数中MyColor的值是多少?
很明显,还是白
要查看蓝色,请在任何方法覆盖中使用 MyColor。最常见的是 OnAppearing
:
protected override void OnAppearing()
{
base.OnAppearing();
// use MyColor here.
}
解决方案是使用 OnHandlerChanged
。经过一些实验,我可以确认 XAML
属性已经在这个阶段设置,并且每次都会调用它。
在代码中,它看起来像这样:
protected override void OnHandlerChanged()
{
base.OnHandlerChanged();
//Retrieve or use your properties
}
另一个建议的解决方案(如果您正在使用 ContentPage
)是 OnAppearing
.
方法
编辑:
进一步说明,这就是 Microsoft docs 对 OnHandlerChanged
的看法:
HandlerChanged
在创建 cross-platform 控件的处理程序后引发。此事件表示实现 cross-platform 控件的本机控件可用,并且 cross-platform 控件上设置的所有 属性 值已应用于本机控件。
我有一个带有 C#
代码隐藏的 XAML
文档。
在 C#
class 中我定义了一些属性,然后我可以在 XAML
中设置:
public partial class MyClass : ContentView
{
public Color MyColor { get; set; }
public MyClass()
{
InitializeComponent()
//Here I want to use the color
}
}
<MyClass MyColor="Blue"/>
问题是从未设置 属性。当我尝试使用它时,它仍然具有默认值(白色)。
当我使用 BindableProperties
:
public static readonly BindableProperty MyColorProperty = BindableProperty.Create(nameof(MyColor), typeof(Color), typeof(MyClass), Colors.White);
public Color MyColor
{
get => (Color)GetValue(MyColorProperty);
set => SetValue(MyColorProperty, value);
}
你应该怎么做?我想使用 XAML
在此元素实例上设置的属性,但它不起作用。
图片 c# 代码而不是 xaml 可能会有所帮助。两者是等价的
如果您的组件的使用看起来像:
var c = new MyClass();
c.MyColor = Color.Blue;
那么构造函数中MyColor的值是多少?
很明显,还是白
要查看蓝色,请在任何方法覆盖中使用 MyColor。最常见的是 OnAppearing
:
protected override void OnAppearing()
{
base.OnAppearing();
// use MyColor here.
}
解决方案是使用 OnHandlerChanged
。经过一些实验,我可以确认 XAML
属性已经在这个阶段设置,并且每次都会调用它。
在代码中,它看起来像这样:
protected override void OnHandlerChanged()
{
base.OnHandlerChanged();
//Retrieve or use your properties
}
另一个建议的解决方案(如果您正在使用 ContentPage
)是 OnAppearing
.
编辑:
进一步说明,这就是 Microsoft docs 对 OnHandlerChanged
的看法:
HandlerChanged
在创建 cross-platform 控件的处理程序后引发。此事件表示实现 cross-platform 控件的本机控件可用,并且 cross-platform 控件上设置的所有 属性 值已应用于本机控件。