如何制作WPF Expander Stretch?

nmd*_*mdr 31 c# wpf expander stretch

ExpanderWPF中的控件不会拉伸以填充所有可用空间.XAML中有任何解决方案吗?

Jon*_*ker 45

你需要做的就是:

<Expander>
  <Expander.Header>
    <TextBlock
      Text="I am header text..."
      Background="Blue"
      Width="{Binding
        RelativeSource={RelativeSource
          Mode=FindAncestor,
          AncestorType={x:Type Expander}},
        Path=ActualWidth}"
      />
  </Expander.Header>
  <TextBlock Background="Red">
    I am some content...
  </TextBlock>
</Expander>
Run Code Online (Sandbox Code Playgroud)

http://joshsmithonwpf.wordpress.com/2007/02/24/stretching-content-in-an-expander-header/

  • 请注意,此解决方案会将标题扩展得有点过宽,因为它没有考虑标题的扩展指标.因此,如果您尝试右对齐文本,则可能需要向TextBlock添加右边距,以使文本不会超出Expander控件. (12认同)
  • 乔希,你总能把这段代码放在你自己的答案中.这样它就更明显,可以投票并标记为答案. (7认同)
  • TextBlock bx = new TextBlock(); bx.Text ="我是标题文字......"; 绑定wdBind = new Binding("ActualWidth"); wdBind.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor,typeof(Expander),1); bx.SetBinding(TextBlock.TextProperty,wdBind); (3认同)

Arc*_*rus 10

不可伸缩的Expanders通常是不可伸缩的父控件的问题.也许其中一个父控件定义了一个HorizontalAlignmentVerticalAlignment属性?

如果您可以发布一些示例代码,我们可以为您提供更好的答案.


小智 6

此解决方案更简单,不会影响您在应用程序中使用的其他扩展器控件.

  <Expander ExpandDirection="Right" Grid.Column="0" Name="topOfB"> 
    <Expander.Header>
        <Grid HorizontalAlignment="Stretch" Width="{Binding Path=ActualWidth, ElementName=topOfB}">
            <!-- control content goes here -->
Run Code Online (Sandbox Code Playgroud)