在WPF中动态生成带有不同内容的单选按钮集合

4
我是一名C++开发人员,最近转向了C#。我正在开发一个WPF应用程序,在其中需要动态生成4个单选按钮。我尝试进行了大量研究和开发,但似乎这种情况很少见。 XAML:
<RadioButton Content="Base 0x" Height="16" Name="radioButton1" Width="80" />

现在这里是情景:我需要生成这个单选按钮4次,并且使用不同的内容,如下所示:
<RadioButton Content = Base 0x0 />
<RadioButton Content = Base 0x40 />
<RadioButton Content = Base 0x80 />
<RadioButton Content = Base 0xc0 />

我在我的C++应用程序中已经完成了以下操作:

#define MAX_FPGA_REGISTERS 0x40;

for(i = 0; i < 4; i++)
{
    m_registerBase[i] = new ToggleButton(String(T("Base 0x")) + String::toHexString(i * MAX_FPGA_REGISTERS));       
    addAndMakeVisible(m_registerBase[i]);
    m_registerBase[i]->addButtonListener(this);
}
m_registerBase[0]->setToggleState(true); 

如果您注意到上面的内容,每次for循环运行时Content的名称会变为Base 0x0Base 0x40base 0x80base 0xc0,并将第一个单选按钮的切换状态设置为true。因此,如果您注意到,这四个按钮将拥有单一的点击方法,并且根据索引执行相应操作。
我该如何在我的WPF应用程序中实现这一点? :)
1个回答

7

我本来想为您编写一段代码,但是意识到您的问题可能已经在这里得到了回答:

WPF/C# - example for programmatically create & use Radio Buttons

根据您的要求,这可能是最简洁的方法。如果您只需要最简单的情况,请看下面:

Xaml:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid >
        <StackPanel x:Name="MyStackPanel" />

    </Grid>
</Window>

C#:

    public MainWindow()
    {
        InitializeComponent();

        for (int i = 0; i < 4; i++)
        {
            RadioButton rb = new RadioButton() { Content = "Radio button " + i, IsChecked = i == 0  };
            rb.Checked += (sender, args) => 
            {
                Console.WriteLine("Pressed " + ( sender as RadioButton ).Tag );
            };
            rb.Unchecked += (sender, args) => { /* Do stuff */ };
            rb.Tag = i;

            MyStackPanel.Children.Add( rb );
        }
    }

只需添加所需的逻辑,用于内容、标签等。


非常感谢你的帮助 :) MVVM 是我想采用的方法。但是我可以看到他有两个按钮点击事件。在我的 MVVM 方法中是否需要这样做? - StonedJesus
不需要。我还想指出,事件处理程序是以“非MVVM”的方式添加的,因为它们是在窗口的代码后台中设置的,而不是通过XAML和视图模型设置。你应该做的是使用样式在radiobutton的IsChecked属性上设置绑定。无论如何,你可以订阅或忽略任何你想要的事件。 - FanerYedermann
这看起来不错。我尝试实现了MVVM方法,效果很好。你的方法也简单得多 :) - StonedJesus
理想情况下,我希望有一个索引,可以告诉我选择了哪个单选按钮。由于所有按钮的点击方法都相同,ID将帮助我执行特定单选按钮的逻辑。我该如何以MVVM方式实现呢? :) - StonedJesus
2
看一下这个链接:https://dev59.com/iXE95IYBdhLWcg3wf-AF如果你想纯粹使用MVVM,那里的第一个答案应该会对你有所帮助。否则,可以尝试我上面初始化代码的修改。 - FanerYedermann
谢谢伙计 :) 你很有帮助 :) - StonedJesus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接