2011-02-08 17 views
14

Tôi đang sử dụng C# và WPF và về cơ bản tôi muốn có một số nút chuyển đổi và chỉ một trong số chúng có thể được chọn cùng một lúc.Làm cách nào để tạo một tập hợp ToggleButton hoạt động như RadioButton?

Tôi tìm thấy another question về điều đó, nhưng giải pháp được hiển thị ở đó không hoạt động và tôi không biết tại sao.

Nếu tôi cố gắng thực hiện như được đề cập trong câu hỏi ở trên, thì ItemTemplate của số ListBox không được áp dụng. Tôi chỉ không nhận được các nút chuyển đổi vào hộp danh sách, thay vào đó nó được hiển thị như là một "hộp danh sách bình thường".

Toggle nút phong cách của tôi trông như thế này, chứa trong một tập tin tài nguyên của tôi:

<Style x:Key="ToggleButtonListBox" TargetType="{x:Type ListBox}"> 
    <Setter Property="ListBox.ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <ToggleButton Content="{Binding}" 
          IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="ListBox.ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="BorderThickness" Value="0" /> 
</Style> 

Tôi muốn để thêm các mục trực tiếp trong mã XAML, do đó, mã của tôi cho rằng sẽ giống như

<ListBox Style="{StaticResource ToggleButtonListBox}"> 
    <ListBoxItem>test1</ListBoxItem> 
    <ListBoxItem>test2</ListBoxItem> 
</ListBox> 

Làm cách nào để tạo một nhóm nút như vậy?

+0

có thể trùng lặp [Làm cách nào để có một nhóm nút chuyển đổi hoạt động như nút radio trong WPF?] (Http://stackoverflow.com/questions/2362641/how-to-get-a-group- của-toggle-nút-to-hành động-như-radio-nút-in-wpf) –

Trả lời

37

Nếu bạn muốn nút radio trông giống như nút bật tắt sẽ không có nút radio được tạo kiểu để trông giống như nút bật tắt giải quyết sự cố của bạn?

<StackPanel> 
    <RadioButton GroupName="groupFoo" Style="{StaticResource {x:Type ToggleButton}}">Button 1</RadioButton> 
    <RadioButton GroupName="groupFoo" Style="{StaticResource {x:Type ToggleButton}}">Button 2</RadioButton> 
</StackPanel> 
+0

yeah tôi nghĩ rằng thực sự giải quyết vấn đề của tôi. Điều này là dễ dàng hơn nhiều so với tôi đã cố gắng để làm điều đó. Mặc dù tôi đã nghĩ về nó một thời gian ngắn, tôi không thể tưởng tượng nó hoạt động tốt và dễ dàng như thế. Tôi sẽ chỉnh sửa giải pháp vào câu hỏi trên. Cảm ơn rất nhiều! –

+1

@ Sören: Đó là một trong những điều tuyệt vời nhất về WPF: hành vi tách biệt với bản trình bày. Ngoài ra, nó sẽ là tốt hơn để đăng các giải pháp như là một câu trả lời. Sau một thời gian bạn có thể chấp nhận nó như là câu trả lời đúng. –

+0

tôi biết, tôi đã cố gắng chấp nhận nó và nó vẫn chưa hoạt động (khóa 3 phút). Bây giờ nó đã làm. Cảm ơn một lần nữa! –