C# ListView赢得';无法在选项卡项中显示

C# ListView赢得';无法在选项卡项中显示,c#,wpf,listview,tabcontrol,tabitem,C#,Wpf,Listview,Tabcontrol,Tabitem,好的,所以我试着让这个应用程序在不同的标签上显示不同的内容 我创建了一个选项卡控件,我有“地图视图”和“文本视图”。我还没有开始在地图视图,所以它目前是空的。“文本视图”应该包含一个ListView和一个WebBrowser 在使用选项卡之前,我在应用程序中有这些项,它们出现了,并且工作得很好。但是现在我正试图将它们放在一个TabItem中,无论我做什么,ListView都不会显示 WebBrowser显示得很好,但是ListView尽管多次尝试将其置于前端,但都不会显示。它不会显示在设计屏幕上

好的,所以我试着让这个应用程序在不同的标签上显示不同的内容

我创建了一个选项卡控件,我有“地图视图”和“文本视图”。我还没有开始在地图视图,所以它目前是空的。“文本视图”应该包含一个ListView和一个WebBrowser

在使用选项卡之前,我在应用程序中有这些项,它们出现了,并且工作得很好。但是现在我正试图将它们放在一个TabItem中,无论我做什么,ListView都不会显示

WebBrowser显示得很好,但是ListView尽管多次尝试将其置于前端,但都不会显示。它不会显示在设计屏幕上,也不会在程序运行时显示。我可以选择它,如果我将XAML复制粘贴到页面的另一部分(不再在TabControl中),它将再次完全可见。我完全不知道这是为什么,我已经花了一个多小时试图弄明白这一点

    <Grid HorizontalAlignment="Left" Height="506" Margin="278,46,0,0"     VerticalAlignment="Top" Width="753" x:Name="TextMapGrid" Background="#FFEEE1E1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TabControl HorizontalAlignment="Left" Height="21" Margin="-1,-21,0,0" VerticalAlignment="Top" Width="136">
            <TabItem Header="Text View">
                <Grid Background="#FFE5E5E5">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <WebBrowser x:Name="RSSWeb" HorizontalAlignment="Left" Height="363" VerticalAlignment="Top" Width="746" Margin="0,135,-620,-498" Grid.ColumnSpan="2"/>
                    <ListView x:Name="RSSList" HorizontalAlignment="Left" Height="121" VerticalAlignment="Top" Width="746" MouseLeftButtonUp="RSSList_MouseLeftButtonUp" Margin="0,-1,-620,-120" Background="White" Grid.ColumnSpan="2">
                        <ListView.View>
                            <GridView>
                                <GridViewColumn Header="Read" Width="50" DisplayMemberBinding="{Binding Read}"/>
                                <GridViewColumn Header="Title" Width="300" DisplayMemberBinding="{Binding Title}"/>
                                <GridViewColumn Header="Date" Width="110" DisplayMemberBinding="{Binding Date}"/>
                                <GridViewColumn Header="Link" Width="343" DisplayMemberBinding="{Binding URL}"/>
                            </GridView>
                        </ListView.View>
                    </ListView>

                </Grid>
            </TabItem>
            <TabItem Header="Map View" Margin="-2,-2,-2,-1">
                <Grid Background="#FFE5E5E5">

                </Grid>
            </TabItem>
        </TabControl>

    </Grid>

您将listview和webbrowser放在一个单元格网格中。 另外,删除listview和webbrowser上的Margin和Grid.Columnspan属性

您可以将它们包装在堆叠面板中,例如

<StackPanel>
    <ListView x:Name="RSSList" HorizontalAlignment="Left" Height="121" VerticalAlignment="Top" Width="746" MouseLeftButtonUp="RSSList_MouseLeftButtonUp" Margin="0,-1,-620,-120" Background="White" Grid.ColumnSpan="2">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Read" Width="50" DisplayMemberBinding="{Binding Read}"/>
                <GridViewColumn Header="Title" Width="300" DisplayMemberBinding="{Binding Title}"/>
                <GridViewColumn Header="Date" Width="110" DisplayMemberBinding="{Binding Date}"/>
                <GridViewColumn Header="Link" Width="343" DisplayMemberBinding="{Binding URL}"/>
            </GridView>
        </ListView.View>
    </ListView>
    <WebBrowser x:Name="RSSWeb" HorizontalAlignment="Left" Height="363" VerticalAlignment="Top" Width="746" Margin="0,135,-620,-498" Grid.ColumnSpan="2"/>
</StackPanel>

或者将行定义添加到网格中,并将其指定给自己的行

<Grid Background="#FFE5E5E5">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <WebBrowser Grid.Row="1" ... Rest of code omitted for brevity />
    <ListView Grid.Row="0" ...Rest of code omitted for brevity />
</Grid>

编辑:演示该概念有效性的简单示例。 您可以创建一个新的窗口/用户控件,并尝试下面的代码示例

<Grid>
    <TabControl>
        <TabItem Header="Stack Panel example">
            <StackPanel>
                <TextBlock Text="ListView" />
                <ListView Height="100" Margin="2"/>
                <TextBlock Text="Web Browser" />
                <WebBrowser Height="100" Margin="2" />
            </StackPanel>
        </TabItem>
        <TabItem Header="Grid example">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <ListView Grid.Row="0" Height="100" Margin="2"/>
                <WebBrowser Grid.Row="1" Height="100" Margin="2"/>
            </Grid>
        </TabItem>
    </TabControl>
</Grid>


这两种方法都不起作用。将WebBrowser放在ListView下面也不起作用。另外,将ListView单独放在第二个选项卡项(Header=“Map View”one)上仍然没有显示ListView。因此,单独在自己的网格上仍然无法显示。是否删除了ListView和WebBrowser上的边距属性?作为参考,这是整个应用程序的图片。右上角的空白灰色区域是ListView应该显示的位置。下面的白色框是仍然显示的WebBrowser。我没有删除边距。编辑:当我删除它们时,web浏览器移动到tabitem网格的顶部,现在与listview重叠。我编辑了代码示例,将WebBrowser移动到listview下方。我还提供了一个简单的例子,向您展示这个概念确实有效。使用WPF,您真的不应该使用边距来定位控件元素。您应该使用容器来控制布局。