6

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

在此处输入图像描述

左上角是ListView父控件,右下角是子控件。这是两个ListViews的代码:

<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>

为什么这适用于一个而不是另一个?在这一点上,我真的很茫然。

更新:在 parentUserControl中,网格布局为:

<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, RowSpan, 或ColumnSpan正确并不能解决问题。

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

“检测到 BindingFailure - 显示名称为“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>

在这一点上,我完全被难住了。ListView我可以在父级中创建一个副本UserControl并让它正确显示...但由于某种原因它不想在子级中表现UserControl...我愿意接受任何想法,如果您需要更多代码,我会非常乐意提供它。

4

2 回答 2

1

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

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

于 2013-06-13T15:43:15.287 回答
0

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

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

于 2013-06-13T09:21:27.090 回答