是否可以从 ViewModel 中的属性获取 control\xe2\x80\x99s 背景颜色?
\n目的是能够改变用户操作的颜色Border或Button基于用户操作的颜色。因为我\xe2\x80\x99m 使用 MVVM 方法,所以理想情况下,我只需通过视图模型中的属性设置控件的背景颜色。
我尝试了以下方法,但它没有 \xe2\x80\x99 工作:
\n<Border\n BackgroundColor="{Binding MyBorderBackgroundColor}">\n <Label Text=\xe2\x80\x9cHello World\xe2\x80\x9d />\n</Border>\nRun Code Online (Sandbox Code Playgroud)\n在我的视图模型中,我使用一个string属性并将其设置为颜色名称(例如)Red或十六进制值(例如)#FF0000。我有一个Init()调用的方法OnAppearing()并设置值的方法 - 见下文:
[ObservableProperty]\nstring myBorderBackgroundColor;\n \n...\n \npublic void Init()\n{\n MyBorderBackgroundColor = "Red"; // Or Hex value => MyBorderBackgroundColor = "#FF0000";\n}\nRun Code Online (Sandbox Code Playgroud)\n该应用程序只是忽略颜色设置并默认为页面背景。没有错误,但只是不使用通过视图模型属性设置的值。
\n有什么建议么?
\n你的支持属性是 a string,而它应该是 a Color。不过,我确实理解您会认为这可行,因为在 XAML 中您可以简单地向其中添加一个字符串。
要理解为什么它在 XAML 中有效但在代码中无效,我们必须了解TypeConverter. 由于 XAML 只能包含字符串,因此我们必须找到一种方法将该字符串转换为实际可用的类型。我们就是TypeConverter这么做的。
在我们希望人们在 XAML 中使用字符串但仍期望获得所需结果的对象上,我们添加此属性,这里它用于Color:
[TypeConverter(typeof(Converters.ColorTypeConverter))]
public class Color
{
/// The class
}
Run Code Online (Sandbox Code Playgroud)
如果您好奇的话,这里是完整的实现。ColorTypeConverter
这意味着,当 XAML 解析器找到此属性和相应的(字符串)值时,它将首先调用该属性,并生成要使用的TypeConverter具体类型(在我们的示例中)。Color
当您像现在这样进行绑定时,TypeConverter不会调用 ,因此我们现在将字符串值绑定到需要对象的属性Color,因此:不起作用。
要解决此问题,请将支持属性更改为 aColor并按原样初始化它。
[ObservableProperty]
Color myBorderBackgroundColor;
// ...
public void Init()
{
MyBorderBackgroundColor = Colors.Red; // Or Hex value => MyBorderBackgroundColor = Color.FromArgb("#FF0000");
}
Run Code Online (Sandbox Code Playgroud)
您的 XAML 包含一个小错误,绑定周围没有引号。不确定这是否在您的实际代码中,但只是为了确定一下。确保值周围有引号,BackgroundColor如下所示:
<Border
BackgroundColor="{Binding MyBorderBackgroundColor}">
<Label Text="Hello World" />
</Border>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |