【问题标题】:WPF: How to bind to another control's child's child propertiesWPF:如何绑定到另一个控件的子属性
【发布时间】:2015-09-23 15:59:45
【问题描述】:

问题: 我在网格中有两个单独的对象:一个 TextBox 和一个 TextBlock 当 TextBox 的垂直滚动条可见时,我希望 TextBlock 可见。

更新:垂直滚动条的可见性应该设置为自动,所以它是我们想要触发的实际可见性(见下文)。

方法: TextBox 的模板似乎包含一个名为 PART_InnerGrid 的网格,该网格又包含一个名为 PART_ContentHost 的滚动查看器。此滚动查看器包含一个名为 ComputedVerticalScrollBarVisibility 的属性,该属性的类型为 Visibility。 我尝试在 TextBlock 上创建触发器,但无法构建正确的绑定路径。我该怎么做:

<TextBox x:Name="TB1" TextWrapping="Wrap" AcceptsReturn="True" MinHeight="40"  VerticalScrollBarVisibility="Auto"/>

<TextBlock Text="VISIBLE" Grid.Row="1" VerticalAlignment="Bottom">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=TB1, Path=(PART_InnerGrid).(PART_ContentHost).ComputedVerticalScrollBarVisibility}">
                    <DataTrigger.Setters>
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger.Setters>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:
     <StackPanel>
        <TextBox Text="text" Width="50" VerticalScrollBarVisibility="Hidden" x:Name="TextBox"/>
        <TextBlock Text="ScrollViewer visible">
            <TextBlock.Style>
                <Style TargetType="TextBlock">
                    <Setter Property="Visibility" Value="Collapsed"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=TextBox, Path=VerticalScrollBarVisibility}" Value="Visible">
                            <Setter Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
    </StackPanel>
    

    【讨论】:

    • 感谢您的回复。如果我不需要一开始就将滚动条的可见性设置为自动,那将起作用。
    【解决方案2】:

    您可以将它们的可见性绑定到一个布尔属性,并使用转换器将布尔值转换为可见性值。

    它们的可见性如下所示:

    Visibility="{Binding YourBoolProperty, Converter={StaticResource Converters_BoolToVisConverter}}"
    

    【讨论】:

    • 感谢您的回复。如果我不需要一开始就将滚动条的可见性设置为自动,那将起作用。
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2011-03-03
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2018-01-13
    相关资源
    最近更新 更多