【问题标题】:How to set visiblity that only effect parent but not the child如何设置只影响父母而不影响孩子的可见性
【发布时间】:2022-10-02 19:50:40
【问题描述】:

当文本框焦点组框出现时,我尝试创建像 gmail 这样的登录表单。但我无法控制孩子的能见度。甚至明确设置父子可见性。这个怎么做?

<GroupBox Visibility=\"Visible\">
    <StackPanel Visibility=\"Visible\">
        <TextBox Text=\"{Binding Username, , UpdateSourceTrigger=PropertyChanged}\">
            <TextBox.Style>
                <Style TargeType=\"{x:Type TextBox}\">
                    <Style.Triggers>
                        <DataTrigger Binding=\"{Binding Username}\" Value=\"\">
                            <Setter Property=\"Visibility\" Value=\"Hidden\" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
    </StackPanel>
</GroupBox>

    标签: wpf xaml


    【解决方案1】:

    “如何设置只影响父母而不影响孩子的可见性”- 你不能。 WPF 的 GUI 是使用树数据结构构建的。从树中删除父级也将始终删除所有子级。这意味着,像UIElement.VisibilityUIElement.Opacity 这样的属性将被渲染引擎隐式“继承”。

    WPF 渲染引擎中的“可见性”是指是否渲染元素的树。渲染引擎会遍历可视化树,根据元素的属性决定是否渲染元素。如果不是,则停止当前子树的遍历。

    因此,要允许 WPF 渲染子元素,您必须将其父元素保留在可视化树中并且可见,即必须告诉渲染引擎渲染它。

    您可以通过将渲染细节的画笔切换到Brushes.Transparent 来实现这一点。渲染引擎现在将使用Transparent 颜色(无颜色)渲染元素。

    对于GroupBox,您还需要清除GroupBox.Header 属性。

    <GroupBox>
      <StackPanel>
        <TextBox x:Name="InputField" />
      </StackPanel>
    
      <GroupBox.Style>
        <Style TargetType="GroupBox">
          <Setter Property="Header"
                  Value="I'm visible!" />
          <Setter Property="Background"
                  Value="Red" />
    
          <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=InputField, Path=IsKeyboardFocusWithin}"
                         Value="False">
              <Setter Property="Header"
                      Value="" />
              <Setter Property="BorderBrush"
                      Value="Transparent" />
                  <Setter Property="Background"
                          Value="Transparent" />
            </DataTrigger>
          </Style.Triggers>
        </Style>
      </GroupBox.Style>
    </GroupBox>
    

    【讨论】:

      猜你喜欢
      • 2019-09-25
      • 1970-01-01
      • 2013-11-15
      • 2011-10-11
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      相关资源
      最近更新 更多