2014-11-22 3 views
0

У меня есть этот xaml. И мне нужно снять отметку со всех других флажков, где один из них отмечен. Я другие слова, чтобы проверить только один. Я добавляю TreeViewItems во время выполнения.xaml C# treeview checkboxex снимите все остальные

<TreeView Name="treeView_max" > 
    <TreeView.Resources> 
     <Style TargetType="{x:Type TreeViewItem}"> 
      <Setter Property="HeaderTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal" > 
          <CheckBox Name="chk" Margin="2" Tag="{Binding}" Checked="checkBox_Checked"> 
          </CheckBox> 
         </StackPanel> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TreeView.Resources> 
</TreeView> 

Добавление TreeViewItems во время выполнения:

foreach (Genesyslab.Desktop.Modules.Core.Model.BusinessAttributes.IDispositionCodeValue item in listOfDispositionCodeValueItemsControl.Items) 
{ 
    TreeViewItem newChild2 = new TreeViewItem(); 
    newChild2.Header = item.DisplayName.Remove(0,item.DisplayName.IndexOf("-") + 1); 
    treeView_max.Items.Add(newChild2);..........` 

и

private void checkBox_Checked(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     //uncheck all checkboxes except selected one   
    } 
    catch (Exception es) 
    { 
     MessageBox.Show(es.ToString()); 
    } 
} 

ответ

1

Вы можете использовать RadioButton элементы управления, которые принадлежат к той же группе вместо этого, который поможет вам поведение только один вариант будучи в состоянии быть выбранным одновременно.

Затем отредактируйте шаблон элемента управления для отображения CheckBox управления вместо этих RadioButton-х, и связать IsChecked свойства каждого CheckBox его родитель RadioButton. Теперь, когда вы «проверите» CheckBox, все остальные элементы управления CheckBox будут сняты.

<TreeView Name="treeView_max" > 
    <TreeView.Resources> 
     <Style TargetType="{x:Type TreeViewItem}"> 
      <Setter Property="HeaderTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal" > 
          <RadioButton Name="chk" Margin="2" Tag="{Binding}" GroupName="SomeGroup"> 
           <RadioButton.Template> 
            <ControlTemplate> 
             <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=RadioButton}}" /> 
            </ControlTemplate> 
           </RadioButton.Template> 
          </RadioButton> 
         </StackPanel> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TreeView.Resources> 
</TreeView> 

Осторожно, где вы используете это. Пользователи привыкли видеть RadioButton, когда они могут выбрать только один вариант, и CheckBox, где они могут выбрать несколько вариантов.