WPF如何使曲面带网格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF如何使曲面带网格相关的知识,希望对你有一定的参考价值。

参考技术A 1、定义一个两行三列的Grid,在每个单元格里面放置一个Button按钮。
2、调整行高和列宽。
3、跨越多行和多列。
4、分割窗口。可以改变GridSplitter对象的填充方式,使其不只是具有阴影的灰色矩形。技巧是使用Background属性应用填充,该属性可以接收简单的颜色或更复杂的画刷。

WPF 网格 — 按特定顺序调整列的大小

【中文标题】WPF 网格 — 按特定顺序调整列的大小【英文标题】:WPF grid — resize columns in certain order 【发布时间】:2015-09-04 06:57:23 【问题描述】:

我遇到了 WPF 网格问题。需要一些帮助。

我有一个分成两列的网格(例如“col1”和“col2”从左到右)。此网格绑定到没有填充的窗口边缘:

|--- col1 ---|--- col2 ---| ← 右窗口边框

如何使这些列与应用窗口一起按特定顺序调整大小?

我的意思是: 当我从右边框缩小窗口时,我需要 col2 首先调整大小。当 col2 达到其 MinWidth 时 — col1 开始缩小(我继续移动窗口的右边框)。

是否可以定义列更改大小的顺序? 或者我可能需要除网格之外的其他东西?

谢谢。

【问题讨论】:

在启动时,在开始最小化窗口之前,两列的宽度是否相等? 好吧,让我们假设是的——相等。 我想了一下——不,不相等。有什么区别吗? 我不太擅长处理事件:-)。 【参考方案1】:

了解如何处理事件并触发自己的事件是理解 C# 的基石,因此我强烈建议您阅读它。话虽如此,这将使您入门,尽管我不确定这是否正是您想要的……请参见下面的示例代码。当窗口宽度增加时,我将编写代码作为练习留给你。祝你好运=)。

在我的 MainWindow 上,我设置了 Height="250" Width="600",其中的 Grid 有两列...

 <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition x:Name="_col1" MinWidth="200" />
            <ColumnDefinition x:Name="_col2" MinWidth="150"/>
        </Grid.ColumnDefinitions>

        <TextBlock x:Name="_txtCol1Width"
                   Grid.Column="0" 
                   Background="Crimson" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />

        <TextBlock x:Name="_txtCol2Width"
                   Grid.Column="1" 
                   Background="Turquoise" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  />
 </Grid>

x

 public partial class MainWindow : Window
    
        public MainWindow()
        
            InitializeComponent();
            this.Loaded += MainWindow_Loaded;
            this.SizeChanged += MainWindow_SizeChanged;
        

        void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
        
            if (this.IsLoaded && e.WidthChanged)
            
                double changeInWindowWidth = e.NewSize.Width - e.PreviousSize.Width;

                if (changeInWindowWidth < 0)
                
                    if (_col2.ActualWidth + changeInWindowWidth >= _col2.MinWidth)
                    
                        // col 2 has not yet reached its minimum (decrease col2, no change for col1)
                        _col2.Width = new GridLength(_col2.ActualWidth + changeInWindowWidth, GridUnitType.Pixel);
                        _col1.Width = new GridLength(_col1.ActualWidth + 0, GridUnitType.Pixel);
                    
                    else if (_col1.ActualWidth + changeInWindowWidth >= _col1.MinWidth)
                    
                        // col 2 has reached its minimum, but col1 has not (decrease col1, no change for col2)
                        _col1.Width = new GridLength(_col1.ActualWidth + changeInWindowWidth, GridUnitType.Pixel);
                        _col2.Width = new GridLength(_col2.ActualWidth + 0, GridUnitType.Pixel);
                    
                    else
                    
                        // both columns have reached their minimum, so decrease width of both equally
                        _col1.MinWidth = _col1.ActualWidth + 0.5 * changeInWindowWidth;
                        _col2.MinWidth = _col2.ActualWidth + 0.5 * changeInWindowWidth;
                        _col1.Width = new GridLength(_col1.MinWidth, GridUnitType.Pixel);
                        _col2.Width = new GridLength(_col2.MinWidth, GridUnitType.Pixel);
                    
                
                else
                
                    // todo: handle window width increased ... 

                

                UpdateTexts();
            
        

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        
            UpdateTexts();
        

        private void UpdateTexts()
        
            _txtCol1Width.Text = String.Format("column 0\nActualWidth: 1\n(MinWidth: 2)", 1, _col1.ActualWidth, _col1.MinWidth);
            _txtCol2Width.Text = String.Format("column 0\nActualWidth: 1\n(MinWidth: 2)", 2, _col2.ActualWidth, _col2.MinWidth);
        
    

【讨论】:

以上是关于WPF如何使曲面带网格的主要内容,如果未能解决你的问题,请参考以下文章

曲面细分阶段

第83天 blender小技巧-02曲面刻字

由网格值定义的曲面下的线积分 - Python

渐进插值的LOOP 曲面细分

基于B样条基函数的隐式曲面重建

origin三维图数据过少,曲面不圆滑,如何处理可以使曲面圆滑。拟合、差值等,不能改变原来的走势