为什么使用RadioButton的自编程用户控件不同步?

时间:2016-04-28 07:00:54

标签: c# wpf xaml user-controls

我为WPF应用程序编写了一些UserControls。 其中之一是实现RadioButton的UserControl。 这是UserControl的XAML:

<UserControl x:Class="UsercontrolExample.UserControls.ControlRadioButton"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:UsercontrolExample.UserControls"
             mc:Ignorable="d"
             d:DesignHeight="25"
             d:DesignWidth="150">
    <Grid x:Name="LayoutRoot">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Border x:Name="border"
                Style="{StaticResource borderbasestyle}">
            <RadioButton x:Name="radiobutton"
                         Content="RadioButton"
                         Margin="2"/>
        </Border>
    </Grid>
</UserControl>

在cs文件中,我编写了一个名为&#34; ControlIsChecked&#34;的属性。调整RadioButton的IsChecked属性,在构造函数中我将其设置为False,这应该是RadioButtons的标准。

/// <summary>
/// Gets or sets if the checkbox is checked.
/// </summary>
public bool? ControlIsChecked
{
    get { return radiobutton.IsChecked; }
    set { radiobutton.IsChecked = value; }
}

在用于测试新用户控件的WPF窗口上,我在Canvas上放置了两个ControlRadioButtons,它位于GroupBox上。

<GroupBox x:Name="groupbox1" Header="Selection" Canvas.Left="24" Canvas.Top="152" Height="98" Width="157">
    <Canvas x:Name="canvasgroupbox1">
        <Controls:ControlRadioButton x:Name="radiobutton1"
                                     ControlContent="RadioButton-1"
                                     ControlFontSize="12"
                                     ControlFontIsBold="True"
                                     ControlFontStyleIsItalic="True"
                                     ControlIsChecked="True"
                                     Canvas.Left="24" Canvas.Top="10"/>
        <Controls:ControlRadioButton x:Name="radiobutton2"
                                     ControlContent="RadioButton-2"
                                     Canvas.Left="24" Canvas.Top="45"/>
    </Canvas>
</GroupBox>

不幸的是我的RadioButtons在运行时没有同步。 通常,当检查第一个RadioButton并检查第二个时,应该取消选中第一个。 但就我而言,两者都经过检查。

如何同步RadioButtons?

提前致谢!

1 个答案:

答案 0 :(得分:0)

非常感谢您的回答和灵感。 与此同时,我找到了另一种附带条件。 我们正在编写一个动态WPF应用程序,Windows应该由保存在DB中的元数据生成。 顺便说一句,像我们自己的RadioButton这样的控件总是放在Canvas上。 所以我试图找出该祖先的名字并将其绑定到组名:

<RadioButton x:Name="radiobutton"
             GroupName="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Canvas}}, Path=Name}"
             Margin="2">
    <TextBlock x:Name="textblock"
               Text="RadioButton"
               TextWrapping="Wrap"></TextBlock>
</RadioButton>

当我尝试ASh的提议时。