XAML 为CornerRadius创建BindableProperty

njthzxwz  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(109)

我一直在尝试创建一些BindableProperty到我的customView,我已经能够创建一个字符串和双一个,但我没有得到一个正确的角落半径。

public static readonly BindableProperty GeneralCornerRadiusProperty =
    BindableProperty.Create(nameof(GeneralCornerRadius), typeof(CornerRadius), typeof(NumberChoseView), new CornerRadius(24));

    public CornerRadius GeneralCornerRadius
    {
        get => (CornerRadius)GetValue(GeneralCornerRadiusProperty);
        set => SetValue(GeneralCornerRadiusProperty, value);
    }
<?xml version="1.0" encoding="utf-8" ?>
<Border xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        x:Class="MauiAppTest.Templates.Views.NumberChoseView"
        xmlns:local="clr-namespace:MauiAppTest.Templates.Views"
        VerticalOptions="Center"
        x:Name="self"
        x:DataType="local:NumberChoseView"
        BindingContext="{x:Reference self}">

    <Border.StrokeShape>
        <RoundRectangle CornerRadius="{Binding GeneralCornerRadius}" />
    </Border.StrokeShape>

</Border>

在ContentPage中,它是这样使用的

<views:NumberChoseView GeneralFontSize="55"
                       Quantity="12"
                       GeneralCornerRadius="30">
</views:NumberChoseView>


我尝试了所有的CornerRadius格式。

8ljdwjyq

8ljdwjyq1#

更新

在GitHub上有一个已知的问题:Border does not change rendering when modifying StrokeShape properties。这意味着如果你为CornerRadius使用绑定并更改值,CornerRadius将不会反映更改。
这个问题现在在.NET8中得到了解决,我已经测试并确认了。
如果你只想设置一个值GeneralCornerRadius="30",而不想对GeneralCornerRadius使用绑定,你可以试试我原来的帖子。
否则,它在.NET8中是固定的,您可以尝试它。

原文

这就是绑定的问题。
对NumberChoseView进行一些更改:
1.删除以下两行:

x:DataType="local:NumberChoseView"
    BindingContext="{x:Reference self}"

字符串
2.使用x:CornerRadius的引用绑定表达式

<RoundRectangle CornerRadius="{Binding GeneralCornerRadius,Source={x:Reference self}}" />


所以NumberChoseView应该是这样的:

<Border xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="dfafdasf.NumberChoseView"
             ...
             x:Name="self" 
             >

    <Border.StrokeShape>
        <RoundRectangle CornerRadius="{Binding GeneralCornerRadius,Source={x:Reference self}}" />
    </Border.StrokeShape>
</Border>


希望有帮助!

相关问题