[英]XAML Bind control property to assigned style
我想要實現的是,為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是這個,因為我的綁定是錯誤的,或者這是不可能的,我正在嘗試做什么?
編輯我現在正在使用工具提示來實現這一目標。 感謝大家的好評和答案!
TextBlock
不是為處理這種情況而設計的。 您應該使用ItemsControl
。
將GridViewColumn.CellTemplate
更改為ItemsControl
將實現此目的。
話雖如此,嘗試使用TextBlock.ActualHeight
而不是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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.