2013-06-12 29 views
6

我遇到了一个奇怪的问题。我在UserControl内显示一个UserControl,此刻每个包含一个完全相同的ListView,如同我将它复制并粘贴到另一个。在父UserControl上,ListView显示正确,但在子UserControl(不管它是什么)上,ListView列拒绝伸展以适应其内容。我不知道为什么会发生这种情况,因为ListView s的代码完全一样。两者都直接放在电网上。完全相同的ListViews显示不同 - 列不能伸展在一个

enter image description here

,左上方是从父控制ListView和右下方是孩子的控制。下面是两个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,网格布局是:

<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.RowGrid.ColumnRowSpan,或ColumnSpan是正确的没有按”解决问题。

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

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

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

更新:我不认为这会事,但只是要彻底,这里是孩子UserControl在父内创建:

<Grid> 
    //Other controls 
    <UserControl Grid.Column="3" 
       Grid.Row="3" 
       Visibility="{Binding AdventurerInfoVisibility}"> 
     <view:AdventurerInfoView /> 
    </UserControl> 
</Grid> 

在这一点上,我完全难倒。我可以在父母UserControl中创建一个ListView的副本,并将其正确显示......但由于某种原因,它不想在子女UserControl中表现出色......我愿意接受任何想法,如果您需要更多信息代码我会很乐意提供它。

+0

如果它们相同,你可以发布包含listview的网格控件的xaml吗? –

+0

我已更新我的帖子。 –

回答

0

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

我想也许你的孩子usercontrol有一些TextBlock样式,并覆盖你的容器设置。

+0

也许你可以使用Snoop来观看列的宽度并从什么方式设置。 – muzizongheng

+0

这当然很有趣。当我尝试在我的程序中使用Snoop时,会发生这种情况:“检测到BindingFailure - 显示名称为'Snoop.XmlSerializers'的程序集无法加载到ID为1的AppDomain的'LoadFrom'绑定上下文中。失败的原因是:System.IO.FileNotFoundException:无法加载文件或程序集“Snoop.XmlSerializers,Version = 2.8.0.0,Culture = neutral,PublicKeyToken = null”或其某个依赖项,系统找不到指定的文件。尽管如此,Snoop在其他程序上工作得很好。 –

+0

此外,子UserControl没有自己的样式。所有那里都有网格和列表视图。 –

1

经过多次修补和挫折之后,我发现是什么导致了这个问题。 UserControl的可见性子项默认设置为折叠状态,并通过单击按钮显示。当我默认可见时,列正确拉伸。

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

相关问题