2017-07-16 90 views
0

我正在一個項目中,我有一個GridView,我需要顯示一個圖像和3 TextBlock s。該圖像具有固定的HeightWidth屬性,第一個TextBlock有1行文本或2個。其他TextBlock只有1行文本。GridView項目的高度是固定的

的問題是,如果第一TextBlock具有1行文字的一切完美顯示,但如果文本長度大於一行沒有在GridViewItem顯示的最後TextBlock並且可以下推那裏得到隱藏。

<GridView ItemsSource="{Binding HomeList, Mode=OneWay}"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ItemsWrapGrid Orientation="Horizontal" HorizontalAlignment="Center"/> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
    <GridView.ItemTemplate> 
     <DataTemplate x:DataType="local:ItemHelper"> 
      <UserControl> 
       <StackPanel> 
        <Image Name="image" Source="{x:Bind ItemImage}" 
          Height="144" Width="256" HorizontalAlignment="Center"/> 
        <TextBlock Name="title" Text="{x:Bind ItemTitle}" Style="{StaticResource OneLinedItemTitle}"/> 
        <TextBlock Name="section" Text="{x:Bind ItemSection}"/> 
        <TextBlock Name="pubUpdate" Text="{x:Bind ItemPublishTime}"/> 
       </StackPanel> 
      </UserControl> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

我也嘗試了上述XAML與RelativePanel,併發生同樣的事情。我想要將高度固定在最大高度,使用title的兩行文字或在GridView中對每個項目進行調整。

image 1

正如你可以看到,第一項顯示3 TextBlock秒,但第2項僅2,其中第一個具有2行文字。

我只看到以下可能的選項:

  1. 設置要固定的物品的最大高度StackPanel的高度
  2. 設置爲固定與2號線的title的高度文字
  3. 也許編輯默認StyleGridViewItem將有助於

或者,也許有其他任何婆這個選項不涉及爲任何元素設置固定的高度。

有什麼建議嗎?謝謝。

+0

你想要做的最後'TextBlock'當第一個'TextBlock'有兩行呢? (說出最後一個「TextBlock」的位置) –

+0

它應該在屏幕上可見。這就是問題基本上,如果第一個TextBlock有兩行,它就會隱藏起來。 – Ahmar

+0

那麼你想擁有不同大小的'GridView.ItemTemplate'? –

回答

0

爲什麼不在UserControl內部使用Grid而不是StackPanelStackPanel大小僅限內容Heights。我會使用Grid,將RowDefinition設置爲第三個至Height="*",將其他設置爲Height="Auto"。我有ItemsControl測試了這個(即工作...)

<GridView ItemsSource="{Binding HomeList, Mode=OneWay}"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ItemsWrapGrid Orientation="Horizontal" HorizontalAlignment="Center"/> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
    <GridView.ItemTemplate> 
     <DataTemplate x:DataType="local:ItemHelper"> 
      <UserControl> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="Auto" /> 
        </Grid.RowDefinitions> 
        <Image Grid.Row="0" Name="image" Source="{x:Bind ItemImage}"       Height="144" Width="256" HorizontalAlignment="Center"/> 
        <TextBlock Grid.Row="1" Name="title" Text="{x:Bind ItemTitle}" Style="{StaticResource OneLinedItemTitle}"/> 
        <TextBlock Grid.Row="2" Name="section" Text="{x:Bind ItemSection}" TextWrapping="Wrap"/> 
        <TextBlock Grid.Row="3" Name="pubUpdate" Text="{x:Bind ItemPublishTime}"/> 
       </Grid> 
      </UserControl> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 
+0

不,這不起作用。如果標題有兩行,它將隱藏模板的部分部分。 – Ahmar

+0

實際的解決方案是爲父元素使用固定的高度,無論是「StackPanel」還是「Grid」。 – Ahmar