2012-05-19 17 views
0

我有一個列表視圖:WPF。 ListViewItem的變化時的大小選擇

<ListView Name="SelectedFeeds"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}" 
       BasedOn="{StaticResource {x:Type ListViewItem}}"> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 

       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" Name="panel"> 
       <TextBlock x:Name="Title" FontSize="24" 
          Text="{Binding Title, IsAsync=True}" TextWrapping="Wrap" /> 
         <Label x:Name="PubDate" FontSize="10" 
           Content="{Binding Path=PubDate, IsAsync=True}" /> 
         <TextBlock my:HtmlParser.HTMLText= 
            "{Binding Path=Description, IsAsync=True}" 
            TextWrapping="Wrap" 
            Width="{Binding ElementName=panel, 
            Path=ActualWidth}" Height="0" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

有在DataTemplate中TextBlock的大高度。

在開始我將此文本塊的高度設置爲「0」,並且當選擇ListViewItem時,我需要將該高度設置爲「自動」。

這可能是觸發器可以完成的,但我無法弄清楚。

回答

4

對於觸發器方法,請在DataTemplate中使用它。

<ListView Name="SelectedFeeds"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" Name="panel"> 
       <TextBlock x:Name="Title" FontSize="24" 
          Text="{Binding Title, IsAsync=True}" TextWrapping="Wrap" /> 
         <Label x:Name="PubDate" FontSize="10" 
           Content="{Binding Path=PubDate, IsAsync=True}" /> 
         <TextBlock x:Name="TextHolder" 
            my:HtmlParser.HTMLText= 
            "{Binding Path=Description, IsAsync=True}" 
            TextWrapping="Wrap" 
            Width="{Binding ElementName=panel, 
            Path=ActualWidth}" Height="0" /> 
      </StackPanel> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}" Value="True"> 
        <Setter TargetName="TextHolder" Property="Height" Value="123"/> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

注意x:Name財產上的TextBlock

+0

就是這樣。謝謝。 – ieaglle

1

你也許可以用觸發器做到這一點(雖然我現在不知道該怎麼做),但是你可以用轉換器來代替。

public class BoolToLengthConverter : IValueConverter 
{ 
    public BoolToLengthConverter() 
    { 
     TrueValue = double.NaN; 
     FalseValue = 0; 
    } 

    [TypeConverter(typeof(LengthConverter))] 
    public double TrueValue { get; set; } 

    [TypeConverter(typeof(LengthConverter))] 
    public double FalseValue { get; set; } 

    #region Implementation of IValueConverter 

    public object Convert(object value, Type targetType, 
          object parameter, CultureInfo culture) 
    { 
     return System.Convert.ToBoolean(value) ? TrueValue : FalseValue; 
    } 

    public object ConvertBack(object value, Type targetType, 
           object parameter, CultureInfo culture) 
    { 
     return TrueValue.Equals(value); 
    } 

    #endregion 
} 

的XAML

<ListView.Resources> 
    <Converters:BoolToLengthConverter 
     x:Key="BoolToHeightConverter" TrueValue="Auto" FalseValue="0" />   
</ListView.Resources> 

<TextBlock ... Height="{Binding Path=IsSelected, 
       Converter={StaticResource BoolToHeightConverter}, 
       RelativeSource={RelativeSource Mode=FindAncestor, 
       AncestorType={x:Type ListViewItem}}}"/> 

你當然可以實現通過使用BoolToVisibilityConverter和綁定到TextBlock的Visibility屬性相同的結果。

+0

您的解決方案效果很好,但可以輕鬆完成。謝謝你! – ieaglle