none
Expander的宽度和WrapPanel兼容性问题 RRS feed

  • 问题

  • 如果在Expander下内嵌WrapPanel控件,会发生一个问题。

    展开Expander,WrapPanel的内容会全部显示在一行,完全破坏了后者的“自动换行”功能。

    我想问,有没有法子固定Expander的宽度啊?当然具体的数值是肯定不行的,因为窗体的大小也要和Expander兼容。

    这真的令我很头疼。

    我的控件结构是这样的:

    展示结果

    Windows < ListBox < (ListBox.Item)Expander < (Expander.Content)DockPanel < (1)Image (2)WrapPanel

    我的初衷是让处于WrapPanel里的那些歌曲信息自动换行排列,但是有排版问题。

    请帮我一下,谢谢你们。


    Just 4 Love

    2013年1月7日 16:47

答案

  • 你可以用绑定去设置你的wrappanel宽度,比如:

     <WrapPanel Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}, Path=ActuaoWidth}" >

    上面的xaml会把宽度绑定到对应的ListBoxItem上,然后你可以绑定ListBoxItem的宽度到ListBox上:

    <ListBox.ItemContainerStyle>
    
        <Style TargetType="{x:Type ListBoxItem}" >
    
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}, Path=ActualWidth}"/>
        </Style>
    
    </ListBox.ItemContainerStyle>
    当然,如果宽度需要计算, 你可以添加绑定的Converter属性。


    Sheldon _Xiao
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年1月9日 8:12
    版主