wpf Xaml与C#的比较

rggaifut  于 2023-03-04  发布在  C#
关注(0)|答案(2)|浏览(267)

我是XAML/WPF的新手,有些地方我不明白。
我不明白为什么我直接在XAML代码中添加的3个单选按钮绑定在一起,而用C#添加的时候却没有绑定。
我所说的“束缚”是指当我检查另一个时,他们不会取消检查他们自己。

<Border Background="#3B3B3B" CornerRadius="10">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="150"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>

            <Grid.RowDefinitions>
                <RowDefinition Height="75"/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <StackPanel Grid.Row="1" 
                        Grid.Column="0" 
                        Name="CatMenu"
                        CanVerticallyScroll="True">
                <RadioButton/>
                <RadioButton/>
            </StackPanel>
        </Grid>
</Border>
foreach (string folder in folders)
            {
                Border border = new Border();
                RadioButton radioButton = new RadioButton
                {
                    Content = System.IO.Path.GetFileName(folder),
                    Background = Brushes.Transparent,
                    Foreground = Brushes.White,
                    Height = 70,
                    VerticalAlignment = VerticalAlignment.Center
                };

                border.Child = radioButton;
                CatMenu.Children.Add(border);
            }
efzxgjgh

efzxgjgh1#

你的c#代码不等同于xaml标记。在xaml中你直接添加了RadioButton到StackPanel。在代码中你把每个RadioButton放到不同的Border元素中。它们有不同的父元素并且没有绑定在一起。

foreach (string folder in folders)
{
    RadioButton radioButton = new RadioButton
    {
        Content = System.IO.Path.GetFileName(folder),
        Background = Brushes.Transparent,
        Foreground = Brushes.White,
        Height = 70,
        VerticalAlignment = VerticalAlignment.Center
    };

    CatMenu.Children.Add(radioButton);
}

如果要使用Borders,则必须为所有按钮分配相同的GroupName,如文档中所述

bcs8qyzn

bcs8qyzn2#

在XAML中,如果将多个单选按钮放入一个容器(如StackPanel)中,系统会自动将它们分组在一起。这意味着一次只能选择组中的一个单选按钮,选择其中一个单选按钮将取消选择同一组中的其他单选按钮。
在C#代码中创建单选按钮时,如果希望单选按钮的行为与XAML中的单选按钮类似,则必须手动设置组名称。默认情况下,在C#中创建的每个单选按钮都在自己的组中,因此选择一个单选按钮不会影响其他单选按钮。
若要在C#中将单选按钮组合在一起,只需将GroupName属性设置为所有单选按钮的相同值。例如,可以将要组合在一起的所有单选按钮的GroupName属性设置为“MyGroup”。
这样,当您选择一个单选按钮时,它将取消选择同一组中以前选择的任何其他单选按钮。

相关问题