1

私はWPFを初めて使用します。私の質問は次のとおりです。

いくつかの情報を運ぶ円オブジェクトがあるアプリケーションがあり、それをドラッグ アンド ドロップしたいと考えています。私の問題は、コンピューターで実行すると正常に動作することですが、画面サイズを変更すると円オブジェクトの形状が歪んで楕円になります。

5 つの行と同じ比率 (*) の列を持つグリッドを使用しています。

画面サイズがインチ(物理サイズ)の縦!=横が変わるときの何かですか?

専門家のアドバイスをお願いします。

(Edit1: キャンバスで試してみました。キャンバスの円は画面に関係なく円のように見えますが、これがグリッドでどのように実装されているのか疑問に思っています!)

`

  <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="257*" />
        <RowDefinition Height="121*" />
        <RowDefinition Height="442*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="520*" />
        <ColumnDefinition Width="121*" />
        <ColumnDefinition Width="865*" />
    </Grid.ColumnDefinitions>
    <Ellipse Name="ellipse2" Stroke="Black" Grid.Row="1" Grid.Column="1" />   </Grid>

`

解像度が変化すると比率が変化し、画面ごとに異なる物理単位が得られるため、私は間違っていることを知っています。グリッドを使用したより良い方法を提案してください。

(編集 2 : ベンの解決策によると、以下は結果の比較です。私の場合、例 3 を使用したいと思いますが、何らかの形でそのストロークに注意する必要がありました!!)

http://i.stack.imgur.com/1QpRR.jpg

4

2 に答える 2

0

何をしようとしているのかわからないので、ここにいくつかの解決策があります。Gridあなたが特にそれを求めたので、それらはすべて使用します。しかし、それが本当に適切であるとは確信していません。

あなたの問題は、Ellipseサイズがによって決定されGrid、アスペクト比を強制する制約がないことです。したがって、画面の解像度が異なるとアスペクトが変化するだけでなく、ウィンドウのサイズを変更するとアスペクトも変化します。

解決策 1: 楕円の幅と高さを設定する

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="257*" />
        <RowDefinition Height="121*" />
        <RowDefinition Height="442*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="520*" />
        <ColumnDefinition Width="121*" />
        <ColumnDefinition Width="865*" />
    </Grid.ColumnDefinitions>
    <Ellipse Stroke="Black" Grid.Row="1" Grid.Column="1" Width="20" Height="20" />
</Grid>

解決策 2: グリッドで幅と高さを設定する

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="257*" />
        <RowDefinition Height="20" />
        <RowDefinition Height="442*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="520*" />
        <ColumnDefinition Width="20" />
        <ColumnDefinition Width="865*" />
    </Grid.ColumnDefinitions>
    <Ellipse Stroke="Black" Grid.Row="1" Grid.Column="1" />
</Grid>

解決策 3: ViewBox を使用する

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="257*" />
        <RowDefinition Height="121*" />
        <RowDefinition Height="442*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="520*" />
        <ColumnDefinition Width="121*" />
        <ColumnDefinition Width="865*" />
    </Grid.ColumnDefinitions>
    <Viewbox Grid.Row="1" Grid.Column="1">
        <Ellipse Stroke="Black" Width="20" Height="20" />
    </Viewbox>
</Grid>

解決策 4: 楕円の幅と高さを一緒にバインドする

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="257*" />
        <RowDefinition Height="121*" />
        <RowDefinition Height="442*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="520*" />
        <ColumnDefinition Width="121*" />
        <ColumnDefinition Width="865*" />
    </Grid.ColumnDefinitions>
    <Ellipse x:Name="ellipse" Stroke="Black" Grid.Row="1" Grid.Column="1" 
             Height="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth}" />
</Grid>

違い

解決策 1 と 2 はどちらも、サイズが何であれ、円に一定のサイズを与えGridます。

解決策 3 と 4 は、どちらもサイズに応じて円のサイズを変更しGridます。

解決策 3 ではストロークの太さも変更されますが、解決策 4 では変更されません。

編集:解決策4を修正

于 2013-10-22T17:59:54.397 に答える