C# WPF:在DataTemplate中的Listview中从textblock设置ListViewItem

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的高度有关,但因为

我有一个Windows Phone 8.1项目,它有一个ListView,它的itemssource由c#code behind填充。它可以工作,但我最终在单行文本块之间留下了空白。我尝试过在textblock上设置高度,它位于其中的一个网格,listview本身。我尝试设置一个ItemContainerStyle,将高度绑定到文本块的高度,但不起作用。
如果我将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>