2016-04-28 84 views
0

我已經爲WPF應用程序編寫了一些UserControls。 其中一個是實現RadioButton的UserControl。 這是用戶控件的XAML:爲什麼自定義的用戶控件與RadioButton不同步?

<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文件我已經設定了一個名爲「ControlIsChecked」爲單選按鈕的器isChecked財產的調整,在我將它設置爲False constructor屬性,它應該是RadioButtons標準。

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

在一個WPF窗口用於測試新的用戶控件,我已經把我的兩個ControlRadioButtons對畫布,它位於一個分組框。

<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> 

不幸的是我的RadioButton在運行時不同步。 正常情況下,當第一個RadioButton被選中時,我檢查第二個,第一個應該是未選中的。 但在我的情況都被檢查。

我該如何同步RadioButtons?

提前致謝!

+1

您可以從RadioButton('ControlRadioButton:RadioButton')派生ControlRadioButton來添加新屬性並覆蓋ControlRadioButton teplate(複製RadioButton模板並編輯它)*不使用內部RadioButton – ASh

+0

但是在那種情況下,我將不再具有Border,不是嗎? –

+0

默認沒有。修復很簡單:在一個新模板中圍繞現有內容創建一個邊界 – ASh

回答

0

非常感謝答案和啓發。 與此同時,我發現另一個附帶條件。 我們正在編寫一個動態的WPF應用程序,Windows應該由保存在數據庫中的元數據生成。 順便說一句,我們自己的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> 

到時候我要與灰的建議一試。

相關問題