0

アップデートをご覧ください

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

<Grid>
    <Label Content="Report Generator" Margin="0,0,0,294"/>
    <TextBox Name="FilePath" Width="300" Height="25" Margin="10,30,207,264"/>
    <Button Width="75" Click="Browse" Margin="335,30,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Height="25" Content="Browse" />
    <Button Width="75" Height="25" Click="Extract" Margin="432,30,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Content="Extract" />
    <ProgressBar x:Name="ExtractBar" Margin="10,70,107,204"/>
    <Label x:Name="FirstEntityCount" Content="Number of Type1 Entities: " Margin="0,191,0,98" />
    <Label x:Name="SecondEntityCount" Content="Number of Type2 Entities: " Margin="0,226,0,65" />
</Grid>

これをVisualStudio2012デザイナーですぐにまとめました。ターゲットフレームワークは.Net4.5であり、これはWPFウィンドウです。これは、既存のソリューションへの追加です。

問題は、3番目と4番目のマージンを削除しない場合(たとえば、Margin = "a、b、c、d"、cとdを0に設定)、指定するVerticalAlignment="Top"HorizontalAlignment="Left"コントロールがトリミングされることです。

下の添付画像を参照してください。コントロールの欠落部分

マージンを0に設定し、配置を設定することでこれを修正できますが、これがデフォルトで発生する理由を知りたいですか?私は文字通りドラッグアンドドロップしたばかりです。コントロールは、VisualStudio2012では正常に表示されます。

Windows8RTMを実行しています。

アップデート

私の質問は、マージンが機能するようになった理由と、以前は機能しなかった理由ではありません(実際のコントロール自体をトリミングするように設定されているように見えます)。なぜこの複雑なIDEがすべてをフラッフするのかを尋ねているだけです...それは2回の再構築で発生しました...私が覚えていることから、それはExpressionBlendでも発生します。再確認します。

4

2 に答える 2

2

Visual StudioまたはExpressionBlendのどちらであっても、デザイナからドラッグアンドドロップすると、デザイナは、コントロールがデザイナサーフェス上でドロップされた正確な場所に要素を配置しようとします。デザイナが要素を配置するとき、マージンは、含まれている要素に対してコントロールを配置するために使用されます。

コントロールをデザインサーフェスにドラッグするときに通常行われることは、マージンをリセットすることです。BlendとVSでは、プロパティの小さな四角をクリックして[リセット]を選択することで、任意の属性をデフォルト設定にリセットできます。

設計者によるマージンの設定は少し面倒であることに同意しました。ただし、ビジュアルデザイナを使用してドラッグアンドドロップするときに、これが他にどのように処理されるかはよくわかりません。

個人的には、手書きのXAMLとデザイナーを切り替える傾向があります。最近、オブジェクトとタイムラインパネルを使用して、XAML内のほぼすべての要素の配置を制御できるため、Blendをより多く使用しています。

ちなみに、Blend XAMLの狂気をクリーンアップするには、VisualStudio用のXAMLStyler拡張機能をインストールします。

于 2012-11-11T18:04:54.717 に答える
1

上と下のマージンを設定することにより、ラベルに特定の高さを強制します。この高さでは、ラベルに挿入したテキストの高さを表示するには不十分な場合があります。下マージンをいくらか減らすと、問題なく収まると思います。

無関係なことに、すべてを技術的に(0,0)の位置に配置してからマージンを使用して配置するよりも、Grid.RowとGrid.Columnを使用してこのグリッドにコントロールを配置する方がよいのではないでしょうか。

于 2012-11-09T10:22:07.343 に答える