相同的ListViews显示不同 - 列不会在一个上拉伸

时间:2013-06-12 23:02:13

标签: c# wpf xaml listview

我遇到了一个奇怪的问题。我在UserControl内显示UserControl,目前每个ListView包含一个完全相同的UserControl,就像我将其从一个复制并粘贴到另一个中一样。在父ListView上,UserControl正确显示,但在子ListView(无论它叫什么)上,ListView列拒绝展开以适应其内容。我不知道为什么会发生这种情况,因为ListView的代码完全相同。两者都直接放在网格上。

enter image description here

左上角是父控件的ListView,右下角是子控件的<ListView ItemsSource="{Binding Adventurers}" Name="AdvListView" HorizontalAlignment="Stretch" Grid.Column="2" Grid.ColumnSpan="1" Grid.Row="2" ScrollViewer.CanContentScroll="False" BorderThickness="3"> <i:Interaction.Triggers> <i:EventTrigger EventName="MouseDoubleClick"> <cmd:EventToCommand Command="{Binding ShowAdvWindowCommand}" CommandParameter="{Binding ElementName=AdvListView, Path=SelectedItem}" PassEventArgsToCommand="False" /> </i:EventTrigger> </i:Interaction.Triggers> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Stretch" /> </Style> </ListView.ItemContainerStyle> <ListView.Resources> <DataTemplate x:Key="NameTemplate"> <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Name}" VerticalAlignment="Center" TextTrimming="CharacterEllipsis" /> </DataTemplate> <DataTemplate x:Key="StatusTemplate"> <TextBlock Margin="2,1,1,1" Text="{Binding Status}" VerticalAlignment="Center" /> </DataTemplate> </ListView.Resources> <ListView.View> <GridView> <GridViewColumn Header="Name" CellTemplate="{StaticResource NameTemplate}" /> <GridViewColumn Header="Status" CellTemplate="{StaticResource StatusTemplate}" /> </GridView> </ListView.View> </ListView> 。以下是UserControl s的代码:

<Grid Background="White">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
        //Listview here among other controls
</Grid>

为什么这个工作在一个而不是另一个?我现在真的很茫然。

更新:在父<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*" /> </Grid.RowDefinitions> //Listview here </Grid> 中,网格布局为:

Grid.Row

在孩子身上:

Grid.Column

修改RowSpanColumnSpanUserControl<Grid> //Other controls <UserControl Grid.Column="3" Grid.Row="3" Visibility="{Binding AdventurerInfoVisibility}"> <view:AdventurerInfoView /> </UserControl> </Grid> 是正确无法解决问题。

更新:可能相关的更多信息:当我尝试在我的程序中使用Snoop时。我收到这个错误:

“检测到BindingFailure - 显示名称为'Snoop.XmlSerializers'的程序集无法加载到ID为1的AppDomain的'LoadFrom'绑定上下文中。失败的原因是:System.IO.FileNotFoundException:无法加载文件或程序集'Snoop.XmlSerializers,Version = 2.8.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。系统找不到指定的文件。“

Snoop对其他程序没有问题。我不知道这是否与这个问题有关,但我想我还是会发布它。

更新:我认为这不重要,但为了彻底,这里是在父母中创建子ListView的地方:

UserControl

此时我完全难过了。我可以在父UserControl中创建{{1}}的副本,并让它正确显示...但由于某种原因,它不想在孩子{{1}}中表现...我对任何想法持开放态度,如果你需要更多代码,我会非常乐意提供它。

2 个答案:

答案 0 :(得分:1)

经过多次修补和挫折之后,我发现了导致问题的原因。默认情况下,子UserControl的Visibility设置为Collapsed,并通过单击按钮使其可见。当我默认显示它时,列正确拉伸。

现在我只需要了解如何让它开始折叠并仍保持拉伸的列宽。

答案 1 :(得分:0)

我创建了一个使用你的代码的deom,它不会重复你的问题。

我想也许你的孩子用户控件有一些TextBlock风格,并覆盖你的容器设置。