在WPF中如何从子元素设置父元素属性

5
我已经创建了一个状态栏:
    <StatusBar>
        <StatusBarItem >
            <WrapPanel>
                <Image Source="/MyApp;component/Images/icon.png" />
                <TextBlock Name="_StatusbarUser" Text="Username"  />
            </WrapPanel>
        </StatusBarItem>
    </StatusBar>

如何创建一个触发器,在将文本块可见性设置为折叠时,它也会触发父状态栏的可见性。
我尝试使用下面的样式,但没有起作用。
   <StatusBar Grid.Row="2" Name="_Statusbar">
        <StatusBar.Resources>
            <Style TargetType="{x:Type StatusBarItem}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type TextBlock}}, Path=Visibility}" Value="Collapsed">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </StatusBar.Resources>
        <StatusBarItem>
            <WrapPanel>
                <Image  Source="/MyApp;component/Images/icon.png" />
                <TextBlock Name="_StatusbarUser" Text="Username" />
            </WrapPanel>
        </StatusBarItem>
    </StatusBar>

Help please, thx


1
我不理解你的代码。你有一个触发器,当TextBlock的可见性变为折叠时会触发,然后还想将StatusBarItem的可见性设置为折叠。此外,RelativeSource向树向上移动,但是你的TextBlock是StatusBar的子级,所以这样做行不通。你可以尝试使用TargetName,但我不知道你想做什么。 - dowhilefor
谢谢,问题已经通过将父属性绑定到子属性(来自LPL)解决了。我的想法是创建一个带有图像的状态栏,我只想从我的代码中访问textblock,以设置文本内容和可见性。但是当我折叠texblock时,图像仍然存在。因此,我想将父元素(statusbaritem)也设置为折叠状态。 - Agung Nugroho
1个回答

4
更好地将父属性绑定到子属性:
<StatusBar>
    <StatusBarItem Visibility="{Binding ElementName=_StatusbarUser, Path=Visibility}">
        <WrapPanel>
            <Image Source="/MyApp;component/Images/icon.png" />
            <TextBlock Name="_StatusbarUser" Text="Username" />
        </WrapPanel>
    </StatusBarItem>
</StatusBar>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接