无法在自定义 Maui 控件中使用 GridLength 属性

问题描述 投票:0回答:2

我正在使用为我的 MAUI 项目制作的自定义控件。在此控件中,我有一个应该是 GridLength 类型的属性,但当我在项目中使用它时,它会引发错误:“值不能为空”。我还尝试将属性声明为字符串并手动转换为 GridLength,但我的 Binding 仍然不起作用,并且当我在 setter 中添加断点时,调试器永远不会到达它。

我的自定义属性的代码:

public static readonly BindableProperty SpaceBetweenProperty = BindableProperty.Create(nameof(SpaceBetween), typeof(GridLength), typeof(IconButton), new GridLength(0.0));

[TypeConverter(typeof(GridLength))]
public GridLength SpaceBetween
{
    get => (GridLength)GetValue(SpaceBetweenProperty);
    set
    {
        SetGridColumns(value);
        SetValue(SpaceBetweenProperty, value);
    }
}

// ...

private void SetGridColumns(GridLength SpaceBetween)
{
    
    IBGrid.ColumnDefinitions = [
        new ColumnDefinition(GridLength.Star),
        new ColumnDefinition(GridLength.Auto),
        new ColumnDefinition(SpaceBetween),
        new ColumnDefinition(GridLength.Auto),
        new ColumnDefinition(GridLength.Star),
    ];
}

我如何在我的 xaml 文件中使用它:

<utils:IconButton Grid.Column="1" Margin="5" IconMargin="10" SpaceBetween="10" LabelText="{Binding MyText}" FontSize="Large" ImageSource="road_sign_warning.svg" ButtonClicked="OnButtonClicked" IconSizeRequest="32" HorizontalOptions="End"/>

(值得注意的是,在添加该自定义属性之前,并且当我的此类自定义控件都没有 SpaceBetween 属性时,我没有编译问题,并且应用程序在没有默认值的情况下运行。)

我收到的错误消息:“值不能为空”,根本没有错误代码。

c# .net xaml maui
2个回答
0
投票

如果要在网格中设置行和列之间的间距,请使用

RowSpacing
ColumnSpacing
属性。

如果您的

SpaceBetween
属性有其他含义,则将其设为
double
类型(或特殊情况下的字符串)


0
投票

使用GridLength Struct时,需要将TypeConverter设置为

[TypeConverter(typeof(GridLengthTypeConverter))]
,如以下代码:

[TypeConverter(typeof(GridLengthTypeConverter))]
public GridLength SpaceBetween
{
    get => (GridLength)GetValue(SpaceBetweenProperty);
    set
    {
        SetGridColumns(value);
        SetValue(SpaceBetweenProperty, value);
    }
}

更多详情,可以参考GridLength结构体定义

© www.soinside.com 2019 - 2024. All rights reserved.