wpf - 如何创建在某些地方延伸的 WPF 路径

标签 wpf canvas pathgeometry

我想为窗口选项卡创建一个 WPF 控件,并且我希望它具有特定的形状。像这样的东西;

      +------------------------------+
      |                              |
*     |                              |
      |                              |
   +--+                              +--+
6  |                                    |  6
   +------------------------------------+   
     6       stretching section       6

所以左下角和右下角的小标签是固定大小的;大约 6x6。但现在我希望中心部分拉伸(stretch)到我拍它的任何容器的宽度。

我目前正在使用 Path 对象,但我不知道如何获得拉伸(stretch)部分,或者即使 Path 是正确的方法。

谁能建议创建这种半可拉伸(stretch)形状的最佳方法?

最佳答案

我通过创建一个继承自 StackPanel 的“StretchStackPanel”在我的应用程序中完成了拉伸(stretch)部分。该类如下所示:

public class StretchStackPanel : StackPanel
{
    public static DependencyProperty StretchDependencyProperty = DependencyProperty.Register("Stretch", typeof(StretchMode), typeof(StretchStackPanel));

    protected override Size MeasureOverride(Size availableSize)
    {
        var baseSize = base.MeasureOverride(availableSize);

        if (availableSize.Width != double.PositiveInfinity && (Stretch & StretchMode.Horizontal) == StretchMode.Horizontal )
        {
            baseSize.Width = availableSize.Width;    
        }
        if (availableSize.Height != double.PositiveInfinity && (Stretch & StretchMode.Vertical) == StretchMode.Vertical)
        {
            baseSize.Height = availableSize.Height;
        }

        return baseSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        var baseSize = base.ArrangeOverride(finalSize);

        if ((Stretch & StretchMode.Horizontal) == StretchMode.Horizontal )
        {
            baseSize.Width = finalSize.Width;    
        }

        if ((Stretch & StretchMode.Vertical) == StretchMode.Vertical)
        {
            baseSize.Height = finalSize.Height;
        }
        return baseSize;
    }

    [Category("Layout")]
    public StretchMode Stretch
    {
        get
        {
            return (StretchMode)GetValue(StretchDependencyProperty);
        }
        set
        {
            SetValue(StretchDependencyProperty, value);
        }
    }
}

你想要的是一个有 2 行的网格。顶行的内容应将其水平对齐设置为居中。最下面一行的内容应该是一个 StretchStackPanel。

关于wpf - 如何创建在某些地方延伸的 WPF 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540969/

相关文章:

wpf - 在WPF中的单独线程中运行openGL引擎

wpf - 如何使默认隐藏的控件显示在 Visual Studio 2010 WPF 设计器中?

c# - TextBlock 选择性线条着色

javascript - 当 Canvas 宽度改变时, Canvas 线宽也会改变

c# - 将凹面 PathGeometry 填充为凸面(找到凹面顶点并移除它们)的简单方法是什么?

wpf - 如何在 XAML 中运行时动态更改 PATH DATA 属性?

c# - 保持数据网格与 mysql 数据库同步

Delphi - 访问提示窗口的 Canvas

android - 在 Android 上以高帧率绘制高分辨率动画

c# - PathGeometry 的非 GUI 替代品?