为什么没有像往常一样提取SelectedItem?

时间:2011-11-24 17:12:31

标签: c# visual-studio silverlight xaml windows-phone-7

这是我在这个令人敬畏的平台上的第一个问题,是的,我在这里搜索了如何做到这一点,在我的情况下是罕见的,因为它假设工作,但我得到的只是作为字符串的SelectedItem(它的内容,这是一个TextBlock)

这是XAML部分,它是一个带有ListItems堆栈的ListBox:

 <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中。到目前为止,我发现了如何做到这一点,但我得到空或null或内容的类型,这是selectedItem的类型,列表框项的类型。我想要的是我从ListBox中选择的ListBoxItem中的TextBlock的Text。

这背后的代码是:

    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,它的内容不会按原样传递,TextBlock中的Text,这是ListBox在ListBoxItem中的含义?

感谢所有回答我的noob问题的人,并且如果我在发布这个或者编码的时候犯了一个错误,请原谅我,这似乎不太可能,因为我在这里问,因为必须是逻辑或我的视线没有看到的其他一些错误。

fr33

2 个答案:

答案 0 :(得分:2)

ListBox的内容是TextBlocks。尝试将SelectedItem转换为TextBlock,然后从中获取文本。

答案 1 :(得分:2)

所选ListBoxItem的内容是TextBlock,而不是字符串。这条线

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

需要:

string selectedText = ((TextBlock)selected.Content).Text; //Content of the Item.