我想要实现的是,为TextBlock控件创建一个样式,该控件在鼠标悬停时根据TextBlock所持有的项目数量进行高度缩放。
我的方法是获取项目金额并将其传递给转换器,该转换器返回TextBlock.Height * items.count但我遇到了麻烦。
此外,我希望这种风格只触发ListView的一列而不是所有,但我还没想过如何做到这一点。
目前我的XAML代码如下所示:
<ListView ItemsSource="{Binding SwItemToPopulate}" Name="lvSoftware" DockPanel.Dock="Top" Margin="10,10,10,10" MinHeight="325" Height="Auto" Width="Auto">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Height">
<Setter.Value>
<Binding
Path="Dependencies.Count"
Converter="{StaticResource ItemCountToTextBoxHeightConverter}"
ConverterParameter="TextBlock.Height" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="Dependencies">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Dependencies}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
这是我的转换器:
namespace test.Converter
{
class ItemCountToTextBoxHeightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (targetType != typeof(double))
throw new InvalidOperationException("The target must be an Integer");
int tbHeight = (int)parameter;
return (Double)value * tbHeight;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
如果我将Brakepoint设置为转换器,我可以看到value参数为0且参数为TextBlock.Height就是这个因为我的绑定错误或者这甚至不可能我想要做什么?
修改 我现在正在使用工具提示来实现这一目标。感谢大家的好评和答案!
答案 0 :(得分:1)
TextBlock
并非旨在处理此方案。您应该使用ItemsControl
代替。
将GridViewColumn.CellTemplate
更改为ItemsControl
可实现此目的。
话虽如此,请尝试使用TextBlock.ActualHeight
而不是Height
。
答案 1 :(得分:1)
您可以反转属性触发器,以便在鼠标未结束时将项目重置为正常高度,因此可以将文本块高度绑定到Dependency.Count。我将正常高度硬编码为20,因为我不确定该怎么做。
<ListView ItemsSource="{Binding Items}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Height" Value="20"/>
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="Dependencies">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Dependencies}"
Height="{Binding Path=Dependencies.Count, Converter={StaticResource ItemCountToTextBoxHeightConverter}, ConverterParameter=20}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>