Задача множественного выбора wp7 listbox - PullRequest
1 голос
/ 05 мая 2011

В моем приложении я реализовал сводку со списком. При этом выбор элемента списка приведет к переходу на другую страницу. Также в том же элементе списка я реализовал контекстное меню для удаления выбранного элемента списка. В некоторых случаях это работает отлично. Здесь моя проблема в том, что, в некоторых случаях, удерживая элемент списка, появляется контекстное меню и появляется опция удаления. и затем он переходит на другую страницу, и всплывающее контекстное меню никогда не скрывается. Любой, пожалуйста, помогите мне решить эту проблему.

Здесь я прилагаю свой фрагмент кода: -

    <DataTemplate x:Key="GroupLoadedTemplate">
        <Grid Height="120" Width="480" VerticalAlignment="Top">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="110"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Border Height="105" Width="110" BorderBrush="White" Grid.Column="0" BorderThickness="2">
                <Image delay:LowProfileImageLoader.UriSource="{Binding Path=Avatar}" Source="/Image/default-thumb-groups.png"/>
            </Border>
            <Grid Grid.Column="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="4"/>
                    <RowDefinition Height="35"/>
                    <RowDefinition Height="50"/>

                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="10" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>

                <TextBlock Text="{Binding Path=Name,Mode=TwoWay}"  Grid.Column="1" Grid.Row="1" FontFamily="Segoe WP Light" FontSize="30" Foreground="{StaticResource PhoneForegroundBrush}" TextWrapping="Wrap"/>
                <TextBlock Text="{Binding Path=Members,Mode=TwoWay}"   Grid.Column="2"  Grid.Row="2" FontFamily="Segoe WP Light" HorizontalAlignment="Left"  FontSize="20" Opacity="0.91" Foreground="{StaticResource PhoneForegroundBrush}" TextWrapping="Wrap"/>

                <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu Name="DeleteGroup" Tag="{Binding Nid,Mode=TwoWay}" Visibility="{Binding ElementName=GroupList,  Path=DataContext.DeleteStatus,Mode=TwoWay, Converter={StaticResource booleanToVisibility}}" IsZoomEnabled="False">
                        <toolkit:MenuItem Header="delete group">
                            <Interactivity:Interaction.Triggers>
                                <Interactivity:EventTrigger EventName="Click">
                                    <Command:EventToCommand Command="{Binding ElementName=GroupList, Path=DataContext.DeleteCommand,Mode=TwoWay}"  CommandParameter="{Binding ElementName=DeleteGroup}" PassEventArgsToCommand="True"/>
                                </Interactivity:EventTrigger>
                            </Interactivity:Interaction.Triggers>
                        </toolkit:MenuItem>
                    </toolkit:ContextMenu>
                </toolkit:ContextMenuService.ContextMenu>


            </Grid>
        </Grid>
    </DataTemplate>

Ответы [ 2 ]

1 голос
/ 05 мая 2011

К сожалению, ваш фрагмент кода не позволяет легко воссоздать ваш код, поскольку он привязан к объектам, которые вы не указали.

Есть ли причина, по которой вы не применяете ContextMenu ко всему ListBoxItem? Я не видел проблемы, когда делал это таким образом.

Я предполагаю, что вы пользуетесь SelectionChanged. Возможно, вы захотите добавить жест Tap (из набора инструментов) и перейти к нему вместо этого.
Я предполагаю, что проблема в том, что выбор устанавливается / изменяется, когда начинает отображаться контекстное меню.

0 голосов
/ 17 августа 2011

У меня есть возможное решение.

Настройте ItemContainerStyle, добавьте StackLayout или Grid или что-нибудь еще вокруг ContentControl.Затем измените существующие состояния, чтобы показать или скрыть свои флажки (при необходимости).Добавьте свойство для привязки флажков, которые не сохраняются с вашими данными, и {Binding YourNewProperty} к флажку XAML.

Теперь вы сможете контролировать и читать выбранные флажки через ваш текстовый текст.

<CheckBox Content="CheckBox" Margin="0,0,50,0" VerticalAlignment="Top" d:LayoutOverrides="Width" IsChecked="{Binding YourNewProperty}"/>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}"/>

Вы также можете получить доступ к флажкам напрямую, используя следующие элементы в цикле элементов списка.Я думаю, что использовать технику привязки просто.

foreach (var loopItem in listBox1.Items)
{
            ListBoxItem itemToCheck = listBox1.ItemContainerGenerator.ContainerFromItem(loopItem) as ListBoxItem;

            // code to find the check box control
            // find a ContentPresenter of that list item.. [Call FindVisualChild Method]
                ContentPresenter ContentPresenterObj = FindVisualChild<ContentPresenter>(itemToCheck);

                // call FindName on the DataTemplate of that ContentPresenter
                DataTemplate DataTemplateObj = ContentPresenterObj.ContentTemplate;
                CheckBox Chk = (CheckBox)DataTemplateObj.FindName("ChkList", ContentPresenterObj);

                // get a selected checkbox items.
                if (Chk.IsChecked == true)
                {
                    MessageBox.Show(Chk.Content.ToString().Trim()); 
                }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...