2010-05-20 49 views
10

我正在使用WPF選項卡控件呈現用戶控件的單獨重複實例。即Item1設置的Tab1,Item2設置的Tab2等等。WPF usercontrols在單獨的選項卡上:爲什麼選項卡之間共享radiobutton組名稱?

看起來單選按鈕組名稱正在標籤之間共享。到底是怎麼回事?

簡單示例:

一個窗口包含選項卡。每個選項卡包含一個用戶控件。

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

用戶控件是一組根本就是兩個單選按鈕:

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

如果運行這個程序,你會看到,只有在第二個選項卡的radiobutton1被檢查,儘管usercontrol定義它始終在啓動時被檢查。

此外,在後面的代碼中設置單選按鈕似乎取消選中其他選項卡中的所有單選按鈕!

似乎事情在鼠標控制下表現得很好(即標籤是獨立的)。

最後,usercontrols看起來似乎是單獨的實例。例如,我嘗試過在用戶控件上使用滑塊,並且它們在各個選項卡上獨立運行。正如他們應該的。

感謝任何人的幫助。我廣泛搜索無濟於事。當然,我不是唯一有此問題的人。我正在使用VS2008。

回答

12

沒有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> 
+1

作品。謝謝。 所以groupname屬性看起來完全沒有必要,你可以隨時將單選按鈕分隔到容器中...... – Daniel 2010-05-20 07:38:24

+0

沒錯。如果您想將RadioButton分組在同一個容器中,您只需要GroupName。但即使如此,你可以把它們放在一個空白的邊框或類似的地方。 – 2010-05-20 08:35:47

+0

如果您希望不同容器下的兩個單選按鈕位於同一組中,該怎麼辦?例如。在不同的堆棧面板中有兩個單選按鈕(出於某種原因),但是一次只能選擇其中一個? – digitguy 2013-06-22 07:43:47

5

此行爲是設計:

組名的整點是允許你定義作爲一組單選按鈕 ,而不必由相同的父被包含 面板。

有關詳細說明,請閱讀this article

簡單說說,也有兩種不同的情況下,兩種解決方案:

  • 如果您已經全部邏輯相關的單選按鈕在一個容器中,然後不指定組名。在這種情況下,單選按鈕將自動形成一個獨立於任何其他單選按鈕組的組。

  • 如果您爲了佈局目的在多個面板上分開邏輯相關的單選按鈕,然後使用read the article作長時間說明。

0

我有一種情況,設計不允許將無線電分離爲單獨的堆棧。所以,我所做的就是從xaml中刪除GroupName並從模型中強制分組。這個想法來自this link,例如,

private bool _useGaugeOpen; 
public bool UseGaugeOpen 
{ 
    get { return _useGaugeOpen; } 
    set 
    { 
     _useGaugeOpen = value; 
     _useATGOpen = !value; 
     RaisePropertyChanged("UseATGOpen");    
    } 
} 
private bool _useATGOpen; 
public bool UseATGOpen 
{ 
    get { return _useATGOpen; } 
    set 
    { 
     _useATGOpen = value; 
     _useGaugeOpen = !value; 
     RaisePropertyChanged("UseGaugeOpen"); 
    } 
} 
相關問題