7

WPFコントロールがあります。

私はこのようにバックグラウンドで十字架を持っている必要があります:
ここに画像の説明を入力してください

その後、「交差した」背景に他のコントロールを追加できるようになります。 ここに画像の説明を入力してください

コントロールをサイズ変更するときに、十字がそのサイズに従う必要があることを知って、十字をどのように描画する必要がありますか?

4

5 に答える 5

14

手っ取り早い方法は、線を使用して、それらの座標を親コンテナの幅と高さにバインドすることです。このようなもの:

<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>
于 2012-04-13T17:39:47.873 に答える
8

これを解決する別の方法は、すべてをに入れて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>
于 2012-04-13T17:49:47.757 に答える
5

レイアウトエンジン用に2つの要素を作成するのではなく、1つのPathアイテムを使用できます。

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

これは16x16の「X」記号です。

ここに画像の説明を入力してください

Data要素に別のサイズを指定するか、必要に応じてを使用ViewBoxして親サイズにスケーリングできます。

線の端は正方形であり、16x16の正方形をわずかに超えていることに注意してください。

ここに画像の説明を入力してください

ボックスを正確に16x16にする場合は、に設定できます。これにより、行の終わりがクリップさWidth="16" Height="16"れます。Path

ここに画像の説明を入力してください

于 2020-10-15T23:36:38.707 に答える
3

Matt Burlandの答えにより、アプリが常に点滅していました('parent'への参照によってアプリのサイズが変更されたと思われるため...その後、行のサイズが変更されたなど...)

そこで、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" />

これは、このソリューションとこのソリューションの組み合わせです

于 2015-07-11T15:04:36.590 に答える
1
    <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要素の前後にラベルを配置すると、線の上に描画されます

于 2012-04-13T17:25:54.347 に答える