Добавление флажков в список wpf для множественного выбора
<StackPanel Grid.Column="0" >
<Button Name="buttonEditListBoxItem" Content="Edit" Click="buttonEditListBoxItem_Click"></Button>
<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 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>
</StackPanel>
Я хочу создать список с шаблоном данных, который включает в себя кнопку и флажок. То, что я хочу сделать, это когда я нажимаю на кнопку "Изменить", эти флажки должны стать видимыми, и когда я нажимаю на нее снова, я хочу сделать эти флажки невидимыми / свернутыми
Ответ: Я изменил код сейчас на это: `
</Window.Resources> <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>` `public class VisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((Boolean)value) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (((Visibility)value) == Visibility.Visible);
}
}`
2 ответа
Самый простой способ добиться этого - использовать тумблер
пример:
<ToggleButton Name="Toggler">
</ToggleButton>
<StackPanel Visibility="{Binding ElementName=Toggler, Path=Checked, Converter={StaticResource booleanToVisibilityConverter}}">
<!-- in here you can place the checkboxes-->
</StackPanel>
вам просто нужно создать конвертер значений, который преобразует логическое значение в перечисление.
другая возможность состоит в том, чтобы использовать элемент "Popup" в сочетании с ToggleButton (который дает ощущение маленького помощника, который всплывает, чтобы редактировать элемент, и если StaysOpen="False" установлен, закрывается немедленно при потере фокуса). Если вы используете это подход, вам не нужно нажимать кнопку редактирования, чтобы скрыть флажки
Как насчет использования ToggleButton
вместо Button
с VisibilityConverter
:
<ListBox Name="ListBoxTriggers"
SelectedValuePath="TriggerId"
IsSynchronizedWithCurrentItem="True"
SelectionChanged="Triggers_SelectionChanged"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
HorizontalContentAlignment="Stretch">
<ListBox.Resources>
<local:VisibilityConverter x:Key="VisibilityConverter" />
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="AUTO" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0"
VerticalAlignment="Center"
x:Name="checkBoxTriggers"
Visibility="{Binding ElementName=ButtonTrigger, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"></CheckBox>
<ToggleButton Grid.Column="1"
Uid="{Binding Path=TriggerId}"
Margin="5"
x:Name="ButtonTrigger"
GotFocus="ButtonTrigger_GotFocus">
<ToggleButton.Content>
<TextBlock Foreground="White"
TextAlignment="Justify"
TextWrapping="Wrap"
Margin="6"
Text="{Binding Path=Name}" />
</ToggleButton.Content>
</ToggleButton>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
VisibilityConverter:
public class VisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((Boolean)value) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (((Visibility)value) == Visibility.Visible);
}
}