マージンがピクセル単位であり、ディスプレイの解像度やフォントサイズ、またはその他の変数とは関係がないことを除いて、これは機能します。
あなたの仮定は正しくありません。(私は同じ仮定と同じ懸念を持っていたので知っています。)
実際にはピクセルではありません
まず、マージンはピクセル単位ではありません。(あなたはすでに私が頭がおかしいと思っていますよね?)FrameworkElement.Marginのドキュメントから:
厚さメジャーの既定の単位は、デバイスに依存しない単位 (1/96 インチ) です。
ドキュメントの以前のバージョンでは、これを「ピクセル」または後で「デバイスに依存しないピクセル」と呼ぶ傾向があったと思います。WPF は物理的なピクセルに関して実際には何もしないため、時間の経過とともに、彼らはこの用語が大きな間違いであることに気付くようになりました。彼らはこの用語を新しい何かを意味するために使用していましたが、聴衆はそれが何を意味するかを想定していました。それはいつも持っていました。そのため、ドキュメントは「ピクセル」への言及を避けることで混乱を避ける傾向があります。代わりに「デバイスに依存しないユニット」を使用するようになりました。
コンピューターのディスプレイ設定が 96dpi (デフォルトの Windows 設定) に設定されている場合、これらのデバイスに依存しない単位はピクセルと 1 対 1 で対応します。ただし、ディスプレイ設定を 120 dpi (以前のバージョンの Windows では「大きなフォント」と呼ばれていました) に設定した場合、Height="96" を含む WPF 要素は、実際には 120 物理ピクセルの高さになります。
したがって、マージンが「ディスプレイの解像度に関連していない」というあなたの仮定は正しくありません。WPF アプリを作成し、120dpi または 144dpi に切り替えてアプリを実行し、すべてが正常に動作することを確認することで、これを自分で確認できます。マージンが「ディスプレイの解像度とは関係ない」という懸念は、問題ではないことが判明しました。
(Windows Vista では、デスクトップを右クリックして [パーソナライズ] を選択し、サイドバーの [フォント サイズ (DPI) の調整] リンクをクリックして 120dpi に切り替えます。Windows 7 でも似たようなものだと思います。変更するとき。)
フォントサイズは問わない
フォントサイズに関しては、それも問題ではありません。これを証明する方法は次のとおりです。次の XAML をKaxamlまたはその他の WPF エディターに貼り付けます。
<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<ComboBox SelectedIndex="0">
<TextBlock Background="Blue">Foo</TextBlock>
</ComboBox>
<ComboBox SelectedIndex="0" FontSize="100pt">
<TextBlock Background="Blue">Foo</TextBlock>
</ComboBox>
</StackPanel>

ComboBox クロムの太さがフォント サイズの影響を受けないことに注意してください。ComboBox の上部から TextBlock の上部までの距離は、デフォルトのフォント サイズを使用していても極端なフォント サイズを使用していても、まったく同じです。コンボボックスの組み込みマージンは一定です。
ラベルと ComboBox の両方のコンテンツに同じフォントを使用し、同じフォント サイズ、フォント スタイルなどを使用する限り、異なるフォントを使用しても問題ありません。ラベルの上部が整列し、トップが整列すれば、ベースラインも整列します。
そうです、マージンを使用してください
私は知っています、それはずさんに聞こえます。しかし、WPF には組み込みのベースライン アラインメントがなく、マージンは、この種の問題に対処するために提供されたメカニズムです。そして、マージンが機能するようにしました。
ここにヒントがあります。これを最初にテストしたとき、コンボボックスのクロムが 3 ピクセルの上部マージンに正確に対応するとは確信していませんでした。結局のところ、特にフォント サイズを含む WPF の多くの項目は、正確な非整数で測定されます。サイズを調整し、デバイスのピクセルにスナップします。丸めによって 120dpi または 144dpi の画面設定で位置がずれないようにするにはどうすればよいでしょうか?
答えは簡単です。コードのモックアップを Kaxaml に貼り付けてから、拡大します (ウィンドウの左下にズーム スライダー バーがあります)。ズームインしてもすべてが揃っていれば問題ありません。
次のコードを Kaxaml に貼り付けてからズームインを開始し、マージンが本当に適切であることを証明します。赤いオーバーレイが 100% ズーム、125% ズーム (120dpi) および 150% ズーム (144dpi) で青いラベルの上部と一列に並んでいる場合は、何にでも機能することを確信できます。私はそれを試してみました.ComboBoxの場合、クロムに整数サイズを使用したことがわかります. 上マージンを 3 にすると、ラベルが毎回 ComboBox テキストと整列します。
(Kaxaml を使用したくない場合は、XAML に一時的な ScaleTransform を追加して 1.25 または 1.5 にスケーリングし、まだ正しく動作することを確認してください。これは、優先する XAML エディターにない場合でも機能します。ズーム機能。)
<Grid>
<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<TextBlock Background="Blue" VerticalAlignment="Top" Margin="0 3 0 0">Label:</TextBlock>
<ComboBox SelectedIndex="0">
<TextBlock Background="Blue">Combobox</TextBlock>
</ComboBox>
</StackPanel>
<Rectangle Fill="#6F00" Height="3" VerticalAlignment="Top"/>
</Grid>
彼らはいつも並んでいます。マージンは行く方法です。