0

私はリストビューを持っています:

<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

2 に答える 2

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

于 2012-05-20T07:08:39.917 に答える
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 プロパティにバインドすることで、同じ結果を得ることができます。

于 2012-05-19T19:07:47.003 に答える