这是一个后续和更具体的问题: 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中执行与此相同的操作。
答案 0 :(得分:2)
您应该能够使用ActualWidth
将数据绑定到ActualHeight
应用于ControlTemplate
的控件的TemplatedParent RelativeSource Binding
和Line
属性。试试这个例子,它会在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,因此您可以将其绘制到您喜欢的任何比例,并且它会调整大小。