我遇到了一个奇怪的问题。我在UserControl
内显示UserControl
,目前每个ListView
包含一个完全相同的UserControl
,就像我将其从一个复制并粘贴到另一个中一样。在父ListView
上,UserControl
正确显示,但在子ListView
(无论它叫什么)上,ListView
列拒绝展开以适应其内容。我不知道为什么会发生这种情况,因为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
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
修改RowSpan
,ColumnSpan
,UserControl
或<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}}中表现...我对任何想法持开放态度,如果你需要更多代码,我会非常乐意提供它。
答案 0 :(得分:1)
经过多次修补和挫折之后,我发现了导致问题的原因。默认情况下,子UserControl的Visibility设置为Collapsed,并通过单击按钮使其可见。当我默认显示它时,列正确拉伸。
现在我只需要了解如何让它开始折叠并仍保持拉伸的列宽。
答案 1 :(得分:0)
我创建了一个使用你的代码的deom,它不会重复你的问题。
我想也许你的孩子用户控件有一些TextBlock风格,并覆盖你的容器设置。