我有一个带有ListView的Windows Phone 8.1项目,该项目的项源由后面的C#代码填充。它有效,但我最后在单行文本块之间留有空白。我试过在文本块,它位于其中的网格, ListView 本身上设置高度。我尝试通过将高度绑定(bind)到文本块的高度来设置ItemContainerStyle,但是它不起作用。
如果将TextBlock的文本设置为“实际高度”绑定(bind),则得到0,所以我一定做错了。我很确定它与ListViewItems的高度有关,但是由于它们是从代码填充的,所以我不知道如何使它们执行我想要的操作。我也尝试过为列表切换到ItemsControl,但它似乎并没有滚动和正常工作。
这是Listview的XAML:
<ListView x:Name="TheList" IsHoldingEnabled="True"
ItemsSource="{Binding items}"
Loaded="WhenListViewBaseLoaded"
ContinuumNavigationTransitionInfo.ExitElementContainer="True"
IsItemClickEnabled="True">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Height" Value="{Binding ElementName=txtBibleText, Path=ActualHeight}"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid x:Name="ItemTemplateGrid" Holding="ListViewItem_Holding" Background="Blue">
<FlyoutBase.AttachedFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Share"
Click="ShareFlyoutItem_Click" />
<MenuFlyoutItem Text="Add to Sharing"
Click="AddSharingFlyoutItem_Click" />
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
<Grid x:Name="gridText">
<TextBlock x:Name="txtBibleText"
FontSize="{Binding TheFontSize}"
Grid.Column="1"
VerticalAlignment="Top"
HorizontalAlignment="Left"
TextWrapping="Wrap"
Margin="0,0,0,0" FontFamily="Global User Interface">
<Run Text="{Binding VerseNumber}"/>
<Run Text="{Binding BibleText}"/>
</TextBlock>
</Grid>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
后面的代码填充了ListView:
XDocument loadedData = XDocument.Load(TranlationFilePath);
var data = from query in loadedData.Descendants("testament").Descendants("book").Descendants("chapter").Descendants("verse")
where (string)query.Parent.Parent.Parent.Attribute("name") == GetTestament
where (string)query.Parent.Parent.Attribute("name") == GetBibleBook
where (string)query.Parent.Attribute("number") == GetChapter
select new BibleLoad
{
VerseNumber = (string)query.Attribute("number"),
BibleText = (string)query.Value.ToString(),
TheFontSize = FontSize
};
TheList.ItemsSource = data;
感谢您的时间。这是我第一次发布问题,希望我做对了。我已经搜索,搜索和试验了很长时间。
编辑完XML并缩短记录后。
与关闭文字换行。
重新包装后,高度设置为20,最小高度设置为31。
MinHeight至20环绕:
最佳答案
多余的空间来自ItemContainerStyle的ListViewItem模板。默认模板不仅包含ItemTemplate的空间,还包含装饰物(例如用于标记选择的复选框)的空间。注意CheckboxContainers的矩形的高度为25.5,SelectedCheckMark的高度为34。
<Grid x:Name="CheckboxContainer">
<Grid.RenderTransform>
<TranslateTransform x:Name="CheckboxContainerTranslateTransform" X="{ThemeResource ListViewItemContentOffsetX}"/>
</Grid.RenderTransform>
<Rectangle x:Name="NormalRectangle" Fill="{ThemeResource CheckBoxBackgroundThemeBrush}" Height="25.5" Stroke="{ThemeResource CheckBoxBorderThemeBrush}" StrokeThickness="{ThemeResource CheckBoxBorderThemeThickness}" Width="25.5"/>
<Path x:Name="CheckGlyph" Data="M0,123 L39,93 L124,164 L256,18 L295,49 L124,240 z" Fill="{ThemeResource CheckBoxForegroundThemeBrush}" FlowDirection="LeftToRight" HorizontalAlignment="Center" Height="17" IsHitTestVisible="False" Opacity="0" Stretch="Fill" StrokeThickness="2.5" StrokeLineJoin="Round" VerticalAlignment="Center" Width="18.5"/>
</Grid>
和
<Border x:Name="SelectedBorder" BorderBrush="{ThemeResource ListViewItemSelectedBackgroundThemeBrush}" BorderThickness="{ThemeResource GridViewItemMultiselectBorderThickness}" IsHitTestVisible="False" Opacity="0">
<Grid x:Name="SelectedCheckMark" HorizontalAlignment="Right" Height="34" Opacity="0" VerticalAlignment="Top" Width="34">
<Path x:Name="SelectedEarmark" Data="M0,0 L40,0 L40,40 z" Fill="{ThemeResource ListViewItemSelectedBackgroundThemeBrush}" Stretch="Fill"/>
<Path x:Name="SelectedGlyph" Data="M0,123 L39,93 L124,164 L256,18 L295,49 L124,240 z" Fill="{ThemeResource ListViewItemCheckThemeBrush}" FlowDirection="LeftToRight" HorizontalAlignment="Right" Height="14.5" Margin="0,1,1,0" Stretch="Fill" VerticalAlignment="Top" Width="17"/>
</Grid>
</Border>
如果您不需要选择行为,则可以将ItemContainerStyle剥离为所需的部分,这样就不必为与应用程序无关的装饰留出空间。如果您确实需要选择,则可以移动或调整选择检查的大小,以便它们适合您的设计。
您可以通过在设计器中选择ListView并右键单击并选择``编辑其他模板''来生成默认的ItemContainerStyle模板。编辑生成的项目容器(ItemContainerStyle)编辑副本...
然后,您可以根据需要编辑装饰高度。
关于c# - WPF : Set ListViewItem from textblock in the Listview within a DataTemplate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25467913/