Не удалось получить индекс выбранного элемента в сетке или элементе списка - PullRequest
0 голосов
/ 11 января 2011

Я работаю на Windows Phone 7, используя VS 2010 Express Edition для Windows Phone. У меня есть сетка изображений, созданных с помощью Wrapppanel. Когда я выбираю любой элемент или изображение, я хочу идентификатор кликаемого изображения. Также аналогичным образом есть списокполе и когда любой элемент списка щелкает, я снова хочу, чтобы значение текстового блока щелкнуло, т.е. текст.Я использую этот метод для выбора элемента списка, здесь нужен идентификатор:

private void on_selection(object sender, SelectionChangedEventArgs e)
{ 
   //want id of clicked item here
}

void grid_image_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
{
   //want id of clicked image in grid here
}

Любые предложения приветствуются.

XML для списка:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="768"/>
        <RowDefinition Height="0*" />
    </Grid.RowDefinitions>


    <ListBox Name="Index_list" SelectionChanged="on_selection">

    </ListBox> 
    <Image Visibility="Collapsed" Margin="0,151,0,200" Name="selected_image"></Image>
</Grid>

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Вы пытались использовать свойство e.AddedItems SelectionChangedEventArgs из аргументов события.

Как говорят в документах, это даст вам

Элементы, которые были выбраны с момента последнего события SelectionChanged.

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

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

1 голос
/ 11 января 2011

Предполагая следующий XAML:

<ListBox Name="Index_list" SelectionChanged="on_selection">
    <!-- These items could also be added in code -->
    <TextBlock Text="list box option 1" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 2" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 3" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 4" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 5" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 6" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 7" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 8" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 9" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 10" Style="{StaticResource PhoneTextExtraLargeStyle}" />
    <TextBlock Text="list box option 11" Style="{StaticResource PhoneTextExtraLargeStyle}" />
</ListBox>

Вы можете получить текст из выбранного TextBlock следующими способами.
(Обратите внимание, что использование MessageBox предназначено исключительно для демонстрации.)

private void on_selection(object sender, SelectionChangedEventArgs e)
{
    // As the listbox is named we can do this:
    if (Index_list.SelectedIndex >= 0)
    {
        MessageBox.Show((Index_list.SelectedItem as TextBlock).Text);
    }

    // if the listbox wasn't named we could do this:
    if (sender is ListBox) // always good to double check
    {
        var sal = sender as ListBox;

        if (sal.SelectedIndex >= 0)
        {
            MessageBox.Show((sal.SelectedItem as TextBlock).Text);
        }
    }

    // Or we could use the EventArgs:
    if (e.AddedItems.Count == 1)
    {
        MessageBox.Show((e.AddedItems[0] as TextBlock).Text);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...