Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XAML将控件属性绑定到指定的样式_C#_Wpf_Xaml - Fatal编程技术网

C# XAML将控件属性绑定到指定的样式

C# XAML将控件属性绑定到指定的样式,c#,wpf,xaml,C#,Wpf,Xaml,我想要实现的是,为TextBlock控件创建一种样式,该控件根据TextBlock所持有的项目数量在鼠标上方缩放高度。 我的方法是获取项目数量并将其传递给转换器,该转换器返回TextBlock.Height*items.count,但我在实现这一点上遇到了困难。 另外,我希望这种样式只对我的ListView的一列触发,而不是对所有列触发,但我还没有考虑如何实现这一点。 当前我的XAML代码如下所示: <ListView ItemsSource="{Binding SwItemToPopul

我想要实现的是,为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>
如果我为转换器设置了制动点,我可以看到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>