You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI添加单选按钮绑定后应用无法启动问题

.NET MAUI单选按钮切换布局导致应用无法启动的解决方案

问题背景

我正在开发一个用于新增媒体元素的.NET MAUI视图,视图包含公共属性以及依赖单选按钮选择的专属属性。需求为:选中Value为"Serie"的RadioButton时仅显示剧集相关StackLayout,选中"Pelicula"时显示电影相关StackLayout,以此类推。

此前代码可正常运行,但给Grid.Column=1下的子StackLayout添加IsVisible绑定后,应用无法启动且无任何报错信息。

问题原因

  1. 绑定引用的控件不存在:你在IsVisible绑定中使用了{x:Reference SerieRadioButton}这类引用,但原代码中的RadioButton并未设置对应的x:Name属性,XAML解析器找不到目标控件,导致启动失败。
  2. 单选按钮未分组:原RadioButton没有设置GroupName,可能会出现允许多选的情况,不符合单选需求。

修复方案

给每个RadioButton添加匹配绑定引用的x:Name,并设置统一的GroupName确保单选逻辑正常,具体修改如下:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:GameVidNet"
             x:Class="GameVidNet.Paginas.NewMediaPage"
             Title="NewMediaPage">

    <Grid>
        
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <StackLayout Padding="20" VerticalOptions="Center" HorizontalOptions="Center" Grid.Column="0" >
            
            <Label Text="Tipo de Media" FontSize="16" />
            <HorizontalStackLayout>
                <!-- 添加x:Name和GroupName -->
                <RadioButton x:Name="SerieRadioButton" Value="Serie" Margin="20" GroupName="MediaTipo">
                    <RadioButton.Content>
                        <Image Source="series.png" HeightRequest="30" WidthRequest="30"/>
                    </RadioButton.Content>
                </RadioButton>
                <RadioButton x:Name="PeliculaRadioButton" Value="Pelicula" Margin="20" GroupName="MediaTipo">
                    <RadioButton.Content>
                        <Image Source="movie.png" HeightRequest="30" WidthRequest="30"/>
                    </RadioButton.Content>
                </RadioButton>
                <RadioButton x:Name="VideojuegoRadioButton" Value="Videojuego" Margin="20" GroupName="MediaTipo">
                    <RadioButton.Content>
                        <Image Source="videogame.png" HeightRequest="30" WidthRequest="30"/>
                    </RadioButton.Content>
                </RadioButton>
            </HorizontalStackLayout>

            <Label Text="ID" FontSize="16" />
            <Entry x:Name="IdEntry" Placeholder="Ingrese el ID" />

            <Label Text="Título" FontSize="16" />
            <Entry x:Name="TitleEntry" Placeholder="Ingrese el título" />

            <Label Text="Género" FontSize="16" />
            <Entry x:Name="GenreEntry" Placeholder="Ingrese el género" />

            <Label Text="Año de Lanzamiento" FontSize="16" />
            <Entry x:Name="ReleaseYearEntry" Placeholder="Ingrese el año de lanzamiento" />

            <Button Text="Guardar" Clicked="SaveButton_Clicked" Margin="0,20,0,0" />
            
        </StackLayout>

        
        <StackLayout Grid.Column="1" Padding="20" VerticalOptions="Center" HorizontalOptions="Center">

            <StackLayout IsVisible="{Binding Source={x:Reference SerieRadioButton}, Path=IsChecked}">
                <Label Text="Temporadas" FontSize="16" />
                <Entry x:Name="SeasonsEntry" Placeholder="Ingrese el número de temporadas" />

                <Label Text="Duración promedio del episodio" FontSize="16" />
                <Entry x:Name="AverageEpisodeDurationEntry" Placeholder="Ingrese la duración promedio del episodio" />

                <Label Text="Es Anime" FontSize="16" />
                <Switch x:Name="IsAnimeSwitch" />

                <Label Text="Está completado" FontSize="16" />
                <Switch x:Name="IsCompletedSwitch" />
            </StackLayout>

            <StackLayout IsVisible="{Binding Source={x:Reference PeliculaRadioButton}, Path=IsChecked}">
                <Label Text="Duración" FontSize="16" />
                <Entry x:Name="DurationEntry" Placeholder="Ingrese la duración" />

                <Label Text="Edad recomendada" FontSize="16" />
                <Entry x:Name="RecommendedAgeEntry" Placeholder="Ingrese la edad recomendada" />

                <Label Text="Ganador de premios" FontSize="16" />
                <Switch x:Name="AwardWinnerSwitch" />
            </StackLayout>

            <StackLayout IsVisible="{Binding Source={x:Reference VideojuegoRadioButton}, Path=IsChecked}">
                <Label Text="Plataformas" FontSize="16" />
                <Entry x:Name="PlatformsEntry" Placeholder="Ingrese las plataformas" />

                <Label Text="Modos de juego" FontSize="16" />
                <Entry x:Name="GameModesEntry" Placeholder="Ingrese los modos de juego" />

                <Label Text="Es original" FontSize="16" />
                <Switch x:Name="IsOriginalSwitch" />

                <Label Text="Está inspirado" FontSize="16" />
                <Switch x:Name="IsInspiredSwitch" />
            </StackLayout>

        </StackLayout>
        
        
    </Grid>

    
</ContentPage>

额外说明

  • 添加GroupName后,三个RadioButton会被归为同一组,确保用户只能选择其中一个
  • 绑定的x:Reference现在能正确找到对应的RadioButton,XAML解析正常,应用可以正常启动
  • 切换单选按钮时,对应的专属属性布局会自动显示/隐藏,符合需求

内容的提问来源于stack exchange,提问作者guillepernas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:25:03