C# WPF:在DataTemplate中的Listview中从textblock设置ListViewItem
我有一个Windows Phone 8.1项目,它有一个ListView,它的itemssource由c#code behind填充。它可以工作,但我最终在单行文本块之间留下了空白。我尝试过在textblock上设置高度,它位于其中的一个网格,listview本身。我尝试设置一个ItemContainerStyle,将高度绑定到文本块的高度,但不起作用。C# WPF:在DataTemplate中的Listview中从textblock设置ListViewItem,c#,xaml,listview,windows-phone-8.1,datatemplate,C#,Xaml,Listview,Windows Phone 8.1,Datatemplate,我有一个Windows Phone 8.1项目,它有一个ListView,它的itemssource由c#code behind填充。它可以工作,但我最终在单行文本块之间留下了空白。我尝试过在textblock上设置高度,它位于其中的一个网格,listview本身。我尝试设置一个ItemContainerStyle,将高度绑定到文本块的高度,但不起作用。 如果我将TextBlock的文本设置为实际高度绑定,我得到0,因此我一定是做错了什么。我很确定这和ListViewItems的高度有关,但因为
如果我将TextBlock的文本设置为实际高度绑定,我得到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>
谢谢你抽出时间。这是我第一次发布一个问题,希望我做得对。我已经搜索、搜索、试验了很长一段时间
编辑XML并缩短记录后。
关闭文本换行
重新打开包装时,高度设置为20,最小高度设置为31。
最小高度至20包装在:
为什么要设置最小高度或高度?尝试指定字体大小,它会自行调整高度,保持text wrapping=wrapp。。。还有一件事,为什么要设置grid.column=1。。您只有一列。额外的空间来自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>
及
如果您不需要选择行为,您可以将ItemContainerStyle剥离到您需要的部分,这样就不必为与应用程序无关的装饰腾出空间。如果确实需要选择,可以移动选择复选框或调整其大小,使其符合您的设计
通过在设计器中选择ListView,右键单击并选择“编辑其他模板”,可以生成默认的ItemContainerStyle模板。编辑生成的项目容器(ItemContainerStyle)编辑副本。。。
然后,您可以根据需要编辑装饰高度。您可以发布xml文档吗?您是否定期在每5个元素后获得空格?xml文档有点长,因为它是整本圣经,但其本质是:'在开始时,上帝创造了天地。地球是没有形状的,空虚的;黑暗笼罩着深渊的表面。神的灵在水面上移动。“你能回答第2条评论吗?不,不是经常在每5个元素之后回答。只有当文本块中只有一行文本,这是圣经的一节时。但每次只有一行文字。
<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>