Добавление флажков в список wpf для множественного выбора - PullRequest
1 голос
/ 25 февраля 2011
  <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 ]

1 голос
/ 25 февраля 2011

Самый простой способ достичь этого - использовать тумблер

пример:

<ToggleButton  Name="Toggler">
</ToggleButton>
<StackPanel Visibility="{Binding ElementName=Toggler, Path=Checked, Converter={StaticResource booleanToVisibilityConverter}}">
<!-- in here you can place the checkboxes-->
</StackPanel>

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

другая возможность - использовать элемент «Popup» в сочетании с ToggleButton (который дает ощущение маленького помощника, который всплывает, чтобы редактировать элемент, и если установлено значение StaysOpen = «False», немедленно закрывается при потере фокуса) Если вы используете этот подход, вам не нужно нажимать кнопку редактирования, чтобы скрыть флажки

1 голос
/ 25 февраля 2011

Как насчет использования 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);
    }
}
...