我有一个列表视图:
<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时,我需要将该高度设置为“自动”。
这可能是通过触发器完成的,但我无法弄明白。
答案 0 :(得分: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
属性。
答案 1 :(得分: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属性,您当然可以获得相同的结果。