繁体   English   中英

在 WPF 中画一个十字

[英]Draw a cross in WPF

我有一个 WPF 控件。

我需要在背景中有一个十字架,如下所示:
在此处输入图片说明

之后,我可以在我的“交叉”背景上添加其他控件:在此处输入图片说明

我应该如何绘制十字,知道当我调整控件时,十字应该遵循其大小?

快速而肮脏的方法是使用线条并将它们的坐标绑定到某个父容器的宽度和高度。 像这样的东西:

<Grid Name="parent">
    <Line  X1="0" Y1="0" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="{Binding ElementName='parent', Path='ActualHeight'}" 
           Stroke="Black" StrokeThickness="4" />
    <Line  X1="0" Y1="{Binding ElementName='parent', Path='ActualHeight'}" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="0" Stroke="Black" StrokeThickness="4" />
</Grid>

使用网格作为父级意味着在线条出现在线条顶部之后添加到网格的任何其他子级:

<Grid Name="parent">
    <Line  X1="0" Y1="0" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="{Binding ElementName='parent', Path='ActualHeight'}" 
           Stroke="Black" StrokeThickness="4" />
    <Line  X1="0" Y1="{Binding ElementName='parent', Path='ActualHeight'}" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="0" Stroke="Black" StrokeThickness="4" />
    <Label Background="Red" VerticalAlignment="Center" HorizontalAlignment="Center">My Label</Label>
</Grid>

解决此问题的另一种方法是将所有内容都放在Viewbox并使用Stretch="fill" 它将为您处理重新调整大小,同时保持适当的比例。 在这种情况下,您不需要使用数据绑定。

<Grid  HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" >
    <Viewbox HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" Stretch="Fill">
        <Grid>
            <Line  X1="0" Y1="0" X2="100" Y2="100" Stroke="Black" StrokeThickness="1" />
            <Line  X1="0" Y1="100" X2="100" Y2="0" Stroke="Black" StrokeThickness="1" />
        </Grid>
    </Viewbox>
    <Label Background="Red" VerticalAlignment="Center" HorizontalAlignment="Center">My Label</Label>
</Grid>

Matt Burland 的回答使我的应用程序不断闪烁(因为我想对“父”的引用调整了它的大小……然后调整了线条的大小,等等……)

所以我使用了 Stretch=Fill 并抑制了对“父”的引用。 现在工作得很好。

<Line x:Name="Line1" Visibility="Hidden" Stroke="Red" StrokeThickness="2" Stretch="Fill"
                X1="0" Y1="0" X2="1" Y2="1" />
<Line x:Name="Line2" Visibility="Hidden" Stroke="Red" StrokeThickness="2" Stretch="Fill"
                X1="0" Y1="1" X2="1" Y2="0" />

这是该解决方案,这混合一个

您可以使用单个Path项,而不是为布局引擎创建两个元素:

<Path Data="M0,0L16,16M16,0L0,16" Stroke="Black" />

这是一个 16x16 的“X”符号:

在此处输入图片说明

您可以在Data元素中指定不同的大小,或者根据需要使用ViewBox将其缩放到其父级大小。

请注意,线端是方形的,并略微超出 16x16 方形:

在此处输入图片说明

如果您希望该框恰好为 16x16,则可以在Path上设置Width="16" Height="16" ,它会剪辑线的末端:

在此处输入图片说明

    <Line  X1="10" Y1="10" X2="50" Y2="50" Stroke="Black" StrokeThickness="4" />
    <Line  X1="10" Y1="50" X2="50" Y2="10" Stroke="Black" StrokeThickness="4" />

如果你想知道 x 和 y 值来自哪里,只需绘制笛卡尔坐标并插入

line 1 - point 1:(10,10), point 2:(50,50)
line 2 - point 1:(10,50), point 2:(50,10)

参考形状http://msdn.microsoft.com/en-us/library/ms747393.aspx

将标签放在 XAML 中的 Line 元素之后/下方,这将使其绘制在线条上

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM