Wpf Winrt-ListView项目不';不要垂直填充所有空间
我有以下列表视图:Wpf Winrt-ListView项目不';不要垂直填充所有空间,wpf,listview,windows-runtime,winrt-xaml,listviewitem,Wpf,Listview,Windows Runtime,Winrt Xaml,Listviewitem,我有以下列表视图: <ListView x:Name="sportList" Grid.Row="0" Grid.Column="0" SelectionChanged="sportList_SelectionChanged"> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="Hori
<ListView x:Name="sportList" Grid.Row="0" Grid.Column="0" SelectionChanged="sportList_SelectionChanged">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Margin="15,0,0,0" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
它生成以下Listview控件:
我想垂直拉伸listviewitems,以便填充所有的空白。
类似于此(通过指定文本块的固定高度实现)
您必须将
列表视图项的高度(或最小高度
)绑定到列表视图的实际高度。当然,我们需要一个转换器将实际高度
转换为每个项目的相同高度:
<ListView x:Name="sportList" Grid.Row="0" Grid.Column="0"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
ScrollViewer.CanContentScroll="False" UseLayoutRounding="True">
<ListView.Resource>
<local:AutoFillHeightConverter x:Key="hc"/>
</ListView.Resource>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="MinHeight" Value="{Binding ActualHeight,
RelativeSource={RelativeSource AncestorType=ListView},
Converter={StaticResource hc}, ConverterParameter=win@sportList}"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Margin="15,0,0,0" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
请注意,关于绑定的ConverterParameter
,我们将其设置为字符串。此字符串包括两个部分,由@
分隔。第一部分应该是窗口的名称
,第二部分应该是列表视图的名称
。我们需要这些名称来访问Convert
方法中的ListView实例,以转换高度。如果您有许多项目需要滚动条,您将如何处理?ChubosaurusSoftware它将有一个固定的项目列表。我将在几个小时内检查它。对不起@King King,但我在尝试编译AutoFillHeightConverterClass时遇到以下错误:“FrameApp.AutoFillHeightConverter”未实现接口成员“Windows.UI.Xaml.Data.IValueConverter.ConvertBack(对象、系统、类型、对象、字符串)”“错误2'FrameApp.AutoFillHeightConverter'未实现接口成员”Windows.UI.Xaml.Data.IValueConverter.Convert(对象、系统类型、对象、字符串)显式接口声明中的'Error 3'IValueConverter.Convert'不是接口错误4'IValueConverter.ConvertBack'的成员。@Duncan_McCloud我再次回答了一个Windows Phone问题,但不知道它。不过,这一次可能很容易修复。这里(WinRT中)的Convert
和ConvertBack
应该有类型为string
(而不是CultureInfo
)的第四个参数,所以您可以尝试进行更改,看看是否有效。我自己修复了这一问题,但编译器仍然无法解析“Binding.DoNothing”和Application.Current.Windows。这可能是因为它是一个Window Store(W8)应用程序,而不是Windows Phone应用程序?@Duncan_McCloud是的,可能是这样,对不起。我从未为Windows Phone编程。但是解决你的问题的想法是一样的。您可以尝试搜索有关如何在Windows Phone中实现转换器的详细信息<代码>绑定。此处不执行任何操作仅意味着不执行任何操作,但如果Windows phone中不存在该操作,则可以尝试使用0
(这并不重要,因为没有任何项目)。我不知道如何修复缺少的Application.Current.Windows
,所以看起来你必须自己搜索更多。
public class AutoFillHeightConverter : IValueConverter {
object IValueConverter.Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
var p = parameter as string;
var win = Application.Current.Windows.Cast<Window>()
.First(w => w.Name == p.Split('@')[0]);
var lv = win.FindName(p.Split('@')[1]) as ListView;
var lvh = Convert.ToDouble(value);
return lv.Items.Count == 0 ? Binding.DoNothing : (lvh / lv.Items.Count);
}
object IValueConverter.ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}