WPF用户控件在不同的选项卡上:为什么在选项卡之间共享radiobutton groupname?

Dan*_*iel 10 wpf user-controls tabcontrol groupname radio-button

我正在使用WPF选项卡控件来呈现用户控件的单独重复实例.即Item1设置的Tab1,Item2设置的Tab2等.

似乎选项卡之间共享单选按钮组名称.到底是怎么回事?

简单的例子:

一个窗口包含选项卡.每个选项卡都包含用户控件.

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:lib="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Grid>
    <TabControl Margin="0,0,0,100" Name="tabControl1">
        <TabItem Header="tabItem1" Name="tabItem1">
            <lib:UserControl1 x:Name="userControlInTab1" />
        </TabItem>
        <TabItem Header="tabItem2" Name="tabItem2">
            <lib:UserControl1 x:Name="userControlInTab2" />
        </TabItem>
    </TabControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)

用户控件只是一组中的两个radiobuttons:

<UserControl x:Class="WpfApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="50" Width="100">
<StackPanel>
    <RadioButton GroupName="Group1" Name="radiobutton1" Content="option1" IsChecked="True" />
    <RadioButton GroupName="Group1" Name="radiobutton2" Content="option2" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

如果您运行此应用程序,您将看到只检查第二个选项卡中的radiobutton1,尽管用户控件定义它始终在启动时进行检查.

此外,在后面的代码中设置radiobutton似乎取消选中其他选项卡中的所有radiobutton!

看起来事情在鼠标控制下表现得很好(即标签是独立的).

最后,用户控件似乎确实是单独的实例.例如,我已尝试使用用户控件上的滑块,并且它们在标签之间的行为是独立的.他们应该这样做.

感谢任何人对此的帮助.我广泛搜索无济于事.当然,我不是唯一一个遇到过这个问题的人.我正在使用VS2008.

Dan*_*ose 16

没有GroupName设置它可以工作.由于一个容器中的RadioButtons无论如何都是自动分组的,因此不是必需的.例如:

<UserControl x:Class="WpfApplication1.UserControl1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Height="50" Width="100">
    <StackPanel>
        <StackPanel>
            <RadioButton  Name="radiobutton1" Content="option1" IsChecked="True" />
            <RadioButton  Name="radiobutton2" Content="option2" />
        </StackPanel>
        <StackPanel>
            <RadioButton  Name="radiobutton3" Content="option3" IsChecked="True" />
            <RadioButton  Name="radiobutton4" Content="option4" />
        </StackPanel>
    </StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)


Ale*_*aus 5

此行为是设计使然:

GroupName的重点是允许您定义充当组的单选按钮,而不必由同一父面板包含.

请阅读本文以获取详细说明.

简而言之,针对两种不同情况有两种解决方案:

  • 如果在一个容器中具有所有逻辑相关的单选按钮,则不要指定GroupName.在这种情况下,单选按钮将自动形成一个独立于任何其他单选按钮组的组.

  • 如果您为了布局目的在多个面板上拆分逻辑相关的单选按钮,那么请阅读该文章以获取详细说明.