Почему SelectedItem не извлекается как обычно? - PullRequest
2 голосов
/ 24 ноября 2011

Это мой первый вопрос в этой удивительной платформе, и да, я искал здесь, как это сделать, что в моем случае редко, потому что предполагается, что работает, но все, что я получаю, это ничего из SelectedItem в виде строки (его содержимое, которое представляет собой TextBlock)

Вот часть XAML, представляющая собой ListBox со стеком ListItems:

 <Button x:Name="propertyChooser" BorderBrush="{x:Null}" Height="90" Margin="22,379,21,0"  OpacityMask="{x:Null}" Style="{StaticResource ButtonStyle1}" VerticalAlignment="Top" Content="" Foreground="Black" Click="propertyChooser_Click" >
                <Button.Background>
                    <ImageBrush ImageSource="/AminoBlocks;component/Images/fillblock.png" />
                </Button.Background>
            </Button>
            <Popup x:Name="PropertyPopUp" Margin="0,0,0,0" Height="400" Width="400" IsOpen="False" >
                <!--ScrollViewer x:Name="PageScrollViewer1" Height="620" Width="400"-->
                <Grid Height="400" Width="400" Background="White">
                <ListBox x:Name="propertyPicker" Margin="0,0,0,0"  Height="400" Width="400" SelectionChanged="propertyPicker_SelectionChanged">

                    <ListBoxItem>
                            <TextBlock x:Name="property1"   Foreground="Black" FontSize="24" Height="45" Width="450" Margin="0,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Center" Text="Non-polar, aliphatic" TextAlignment="Center"/>
                        <!--Click="property1_Click"-->


                    </ListBoxItem>
                    <ListBoxItem>
                            <TextBlock x:Name="property2"   Foreground="Black" FontSize="24" Height="45" Width="450" Margin="0,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Center" Text="Non-polar, aromatic" TextAlignment="Center"/>
                        <!--Click="property1_Click"-->


                    </ListBoxItem>
                    <ListBoxItem>
                   ...

Хорошо, список имеет длину 9 элементов, и когдаВы нажимаете кнопку, список появляется в виде всплывающего окна, затем нажимаете или выбираете свойство и код позади, предполагается, что содержимое кнопки меняется на свойство, выбранное в ListBox.Пока что я нашел, как это сделать, но я получаю пустое или нулевое значение или тип содержимого, который является типом selectedItem, типом элемента списка.Все, что мне нужно, это текст TextBlock, который находится в ListBoxItem, который я выбираю из ListBox.

Код для этого четного кода:

    private void propertyPicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ListBoxItem selected = propertyPicker.SelectedItem as ListBoxItem; //Selected item.
        string selectedText = selected.Content as String; //Content of the Item.

        if (propertyPicker.SelectedItem != null)
            propertyChooser.Content = selectedText; //(propertyPicker.SelectedItem as ListBoxItem).Content as string;

        PropertyPopUp.IsOpen = false; //When the item get selected, close the pop up.

    }
                                 ...

Да, это предполагает выполнение работы, но это не так, как я уже говорил выше, это просто дает мне пустое место,null или тип selectedItem, тип listboxitem ... Я пробовал длинный путь, тот, который реализуется, и короткий путь, тот, который комментируется сбоку.

Почему неSelectedItem, его содержимое не будет передаваться как есть, Text from TextBlock, который ListBox имеет в качестве ListBoxItem?

Спасибо всем, кто ответит на мой вопрос о noob, и простите, если ясделайте ошибку при публикации этого или одного при кодировании, что я не совсем понимаю, так как я спрашиваю здесь, и, поскольку это должна быть логика или какая-то другая ошибка, которую мой взгляд не видит.

фр33

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

Содержимое выбранного элемента ListBoxItem представляет собой TextBlock, а не строку.Строка

string selectedText = selected.Content as String; //Content of the Item.

должна быть:

string selectedText = ((TextBlock)selected.Content).Text; //Content of the Item.
2 голосов
/ 24 ноября 2011

Содержимое вашего ListBox - это TextBlocks.Попробуйте привести ваш SelectedItem к TextBlock, а затем получить из него текст.

...