如何重置列表框的datatemplate中复选框的isChecked属性

时间:2011-02-26 05:49:38

标签: wpf listbox datatemplate checkbox

<StackPanel Grid.Column="0" >
        <ToggleButton Name="buttonEditListBoxItem" 
                      Content="Edit" 
                      IsChecked="False"
                      Click="buttonEditListBoxItem_Click"></ToggleButton>
        <ListBox  Name="ListBoxTriggers" 
             SelectedValuePath="TriggerId" 
             IsSynchronizedWithCurrentItem="True"
             SelectionChanged="Triggers_SelectionChanged"
             ScrollViewer.HorizontalScrollBarVisibility="Auto" 
             HorizontalContentAlignment="Stretch">
        <ListBox.ItemTemplate>
            <DataTemplate>  <Grid >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="AUTO"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <CheckBox Visibility="{Binding ElementName=buttonEditListBoxItem, Path=IsChecked, Converter={StaticResource visibilityConverter}}" Grid.Column="0" VerticalAlignment="Center" x:Name="checkBoxTriggers" ></CheckBox>
                        <Button Grid.Column="1" Style="{StaticResource GlassButton}" 
                        Uid="{Binding Path=TriggerId}" 
                        Margin="5"
                       x:Name="ButtonTrigger"
                       GotFocus="ButtonTrigger_GotFocus"
                      >
                            <Button.Content>
                                <TextBlock Foreground="White" TextAlignment="Justify"
                                   TextWrapping="Wrap" Margin="6"   Text="{Binding Path=Name}"/>
                            </Button.Content>
                        </Button>
                    </Grid>
                </DataTemplate> </ListBox.ItemTemplate>
    </ListBox>

我有一个Listbox的数据模板,它有一个按钮和一个复选框。列表框外面有一个ToggleButton,它决定了复选框的可见性。 问题是,如果我点击了ToggleButton并且复选框是可见的,当我再次单击ToggleButton时,我已经检查了一些复选框,隐藏了复选框,但我希望复选框重置;当它们再次可见时,我不想点击任何复选框。

1 个答案:

答案 0 :(得分:2)

您可以为CheckBox的IsVisibleChanged事件添加处理程序:

IsVisibleChanged="checkBoxTriggers_IsVisibleChanged"

并在句柄中清除IsChecked标志:

private void checkBoxTriggers_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
  CheckBox cb = sender as CheckBox;

  if (!cb.IsVisible) 
    cb.IsChecked = false;
}

使用类似于此的触发器可能会产生相同的效果:

<Trigger Property="IsVisible" Value="false">
  <Setter Property="IsChecked" Value="false" />
</Trigger>