Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在WPF中画一个十字_.net_Wpf_Wpf Controls - Fatal编程技术网

.net 在WPF中画一个十字

.net 在WPF中画一个十字,.net,wpf,wpf-controls,.net,Wpf,Wpf Controls,我有一个WPF控件 我需要在背景中有一个十字架,像这样: 之后,我可以在“交叉”背景上添加其他控件: 我应该如何画十字架,知道当我重新缩放控件时,十字架应该跟随它的大小 <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

我有一个WPF控件

我需要在背景中有一个十字架,像这样:

之后,我可以在“交叉”背景上添加其他控件:

我应该如何画十字架,知道当我重新缩放控件时,十字架应该跟随它的大小

    <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" />
参考形状


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

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

<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>

我的标签

另一种解决方法是将所有内容放在
视图框中,然后使用
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>

我的标签

马特·伯兰的回答让我的应用程序不断闪烁(因为我想对“家长”的引用调整了它的大小…然后调整了行的大小,等等)

因此,我使用了Stretch=Fill并抑制了对“parent”的引用。现在很好用

<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" />


这是此解决方案和此

的混合,而不是为布局引擎创建两个元素,您可以使用单个路径
项:


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

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

请注意,线端为正方形,略微延伸到16x16正方形以外:

如果希望框的大小正好为16x16,可以在路径上设置
Width=“16”Height=“16”
,该路径将剪辑行的结尾:


顺便说一句,我刚注意到你的名字,我来自小世界的基希讷乌,无论如何,希望这能让你开始使用ViewBox时要注意的一点是,它也会缩放线条的厚度(即,当你调整窗口大小时,线条会变粗)。这是否可取,是另一个问题。@MattBurland,这是真的。谢谢你的提醒,救了我一天。谢谢@BojinLi
<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" />