基于ControlTemplate中的高度/宽度绘制线条

时间:2014-07-14 21:09:04

标签: wpf wpf-controls

这是一个后续和更具体的问题: Switching from GDI/WinForms to WPF for custom UI elements

我试图让ControlTemplate复制我原始问题中显示的外观。外边框由6条线组成,其坐标需要取决于应用模板的按钮的高度和宽度。有些坐标是总数的百分比,有些则需要是静态偏移。

将X1,Y1等绑定到这些属性的语法是什么?

或者,如果有更好的方法将该6面形状绘制为仍然允许依赖于高度和宽度的边框,我也会对此持开放态度。

这是我用于使用GDI生成绘图点的原始代码:

    int DiagonalOffset = 15;

    List<Point> pts = new List<Point>();
    pts.Add(new Point(offset, this.Height - offset));
    pts.Add(new Point(offset, DiagonalOffset));
    pts.Add(new Point(DiagonalOffset, offset));
    pts.Add(new Point(this.Width - offset, offset));
    pts.Add(new Point(this.Width - offset, this.Height - DiagonalOffset));
    pts.Add(new Point(this.Width - DiagonalOffset, this.Height - offset));
    pts.Add(new Point(offset, this.Height - offset));

我需要在ControlTemplate中执行与此相同的操作。

2 个答案:

答案 0 :(得分:2)

您应该能够使用ActualWidth将数据绑定到ActualHeight应用于ControlTemplate的控件的TemplatedParent RelativeSource BindingLine属性。试试这个例子,它会在ControlTemplate应用的控件上对角绘制<ControlTemplate> <Line X1="0.0" X2="{Binding ActualWidth, RelativeSource={RelativeSource TemplatedParent}}" Y1="0" Y2="{Binding ActualHeight, RelativeSource={ RelativeSource TemplatedParent}}" Stroke="Black" StrokeThickness="5" /> </ControlTemplate>

{{1}}

答案 1 :(得分:2)

我只想使用Path,并允许它伸展到容器大小(例如,网格)。所以你可以在ControlTemplate中有这样的东西:

<ControlTemplate>
    <Grid Background="LightGray">
        <Path Data="M 0,2 L 2,0 L 10,0 L 10,8 L 8,10 L 0,10 Z" 
              Stretch="Fill"
              Stroke="Black" StrokeThickness="1" 
              Margin="1"
        />
    </Grid>
</ControlTemplate>

路径使用vector-style graphics,因此您可以将其绘制到您喜欢的任何比例,并且它会调整大小。

path screenshot