none
LIstBox空白区域的困惑 RRS feed

  • 问题

  • 我做了一个默认的ListBox:

            <ListBox Width="302" Height="200" Background="Red" Padding="0" Margin="10,10,205,109">
                <ListBoxItem>dddd</ListBoxItem>
                <ListBoxItem>dddd</ListBoxItem>
                <ListBoxItem>dddd</ListBoxItem>
            </ListBox>

    实际运行却是这样的,为什么右边、下边都有空白?(注:算上空白区域宽度才有302):

    这都是默认代码,没有做过任何样式定义。感觉右边和下边有一部分内容被裁掉了。。。。


    da jia hao!

    2017年7月25日 11:02

答案

  • Hi liubin,

    不知道ListBox的父元素是什么?这个应该和你设置的Margin有关,当Margin+Width的总宽度超过window的宽度时,高度也同理。WPF布局系统会根据元素的尺寸和位置来计算元素实际的渲染大小和位置。

    建议参考MSDN 文档关于布局的这一章:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/layout

    WPF布局系统的布局过程如下:

    • 子元素最先开始布局,测量其核心属性。
    • 对FrameworkElement上定义的大小属性进行计算,例如Width,Height和Margin。
    • 应用布局控件如面板的专用逻辑,例如Dock方向或堆叠方向。
    • 所有元素被测量后安排内容。
    • 元素在屏幕上绘制。
    • 如果将额外的“子元素”添加到集合,应用了LayoutTransform或调用UpdateLayout方法,则再次调用该过程。

    Best Regards,

    Bob


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2017年7月26日 7:12
    版主

全部回复

  • Hi liubin,

    不知道ListBox的父元素是什么?这个应该和你设置的Margin有关,当Margin+Width的总宽度超过window的宽度时,高度也同理。WPF布局系统会根据元素的尺寸和位置来计算元素实际的渲染大小和位置。

    建议参考MSDN 文档关于布局的这一章:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/layout

    WPF布局系统的布局过程如下:

    • 子元素最先开始布局,测量其核心属性。
    • 对FrameworkElement上定义的大小属性进行计算,例如Width,Height和Margin。
    • 应用布局控件如面板的专用逻辑,例如Dock方向或堆叠方向。
    • 所有元素被测量后安排内容。
    • 元素在屏幕上绘制。
    • 如果将额外的“子元素”添加到集合,应用了LayoutTransform或调用UpdateLayout方法,则再次调用该过程。

    Best Regards,

    Bob


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2017年7月26日 7:12
    版主
  • 谢谢,的确是margin的问题。

    不过我觉得还是vs的bug,因为我就是用鼠标拖动listbox调整它在grid中的位置,然后vs会自动生成Margin属性,然而这个属性我计算MarginLeft+MarginRight,再加上listbox的宽度,的确超过了window的宽度。应该是vs的bug吧?


    da jia hao!

    2017年7月26日 8:40
  • Hi,

    我不知道这是不是设计器的问题?我个人认为不是或者无关紧要,因为在真正设计界面的时候,我们是不会直接拖拽UI界面上的元素,应该使用代码手动根据美工提供的数据精确的设置相关布局系数。

    Best Regards,

    Bob


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.



    2017年7月26日 8:47
    版主