C# XAML将控件属性绑定到指定的样式
我想要实现的是,为TextBlock控件创建一种样式,该控件根据TextBlock所持有的项目数量在鼠标上方缩放高度。C# XAML将控件属性绑定到指定的样式,c#,wpf,xaml,C#,Wpf,Xaml,我想要实现的是,为TextBlock控件创建一种样式,该控件根据TextBlock所持有的项目数量在鼠标上方缩放高度。 我的方法是获取项目数量并将其传递给转换器,该转换器返回TextBlock.Height*items.count,但我在实现这一点上遇到了困难。 另外,我希望这种样式只对我的ListView的一列触发,而不是对所有列触发,但我还没有考虑如何实现这一点。 当前我的XAML代码如下所示: <ListView ItemsSource="{Binding SwItemToPopul
我的方法是获取项目数量并将其传递给转换器,该转换器返回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>
如果我为转换器设置了制动点,我可以看到value参数为0,参数为TextBlock。这是因为我的绑定错误,还是因为我不可能这样做
编辑
我现在使用工具提示来实现这一点。谢谢大家的评论和回答
TextBlock
不是为处理这种情况而设计的。你应该改用
将GridViewColumn.CellTemplate
更改为ItemsControl
可以实现这一点
话虽如此,请尝试使用
TextBlock.ActualHeight
而不是Height
您可以反转属性触发器,以便在鼠标未结束时将项目重置为正常高度,因此TextBlock Height可以绑定到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>
谢谢!我现在使用的是ItemsControl,value参数现在被传递到转换器,但是ConverterParameter仍然不工作。知道吗?我已经编辑了我的答案;试一试,让我知道它是否有效。实际上,在这种情况下,将ConverterParameter
值更改为{TemplateBinding ActualHeight}
是行不通的。我不确定如何访问TextBlock
。也许在中显示内容是一种更好的策略?ConverterParameter无法绑定到任何属性,因为它不是依赖性属性。我不确定您描述的行为是否可以用作接口。如果将鼠标移到第一个listitem上,并且该条目有100个依赖项,会发生什么情况。所以它的高度增加到100倍。现在你如何进入第二项?如果将鼠标向下移动到第一个项目的正下方,即100x+1,则会立即导致第一个项目再次塌陷为1x。这意味着第二项现在远高于鼠标所在的位置。
<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>