に設定されている行でグリッドを行うことができますために。 Label
コントロールは、コンテンツがなく、明示的にディメンションを設定していない場合は、スペースを要求しません。 Height
を設定すると目的の目的には十分ですが、もちろんLabel
の視覚的な高さはコンテンツに依存するのではなく、その明示的な設定に依存します。
あなたが現在使っている回避策は合理的なものだと思います。コンテンツが実際には決してnull
でないことを保証するので、Label
コントロールは、文字列が空であっても、指定されたコンテンツに対応する高さを常に要求します。
この回避策をStyle
で適用できるようにすることをコメントに記載しました。モデルバインディングのターゲットプロパティを変更する場合は、モデルをLabel.DataContext
プロパティにバインドし、Style
をDataContext
からContent
に設定するだけで簡単に行うことができます。例えば
:
class Model
{
public string Text1 { get; set; }
public string Text2 { get; set; }
public string Text3 { get; set; }
}
当然、あなたはどのようなモデルを使用して結合すると、あなたのケースでは適切であったと思います:
<Window x:Class="TestSO36368066NonCollapseLabel.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:p="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:TestSO36368066NonCollapseLabel"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<l:Model Text1="label 1" Text3="label 3"/>
</Window.DataContext>
<Window.Resources>
<p:Style TargetType="Label">
<Setter Property="Padding" Value="0"/>
<Setter Property="Content" Value="{Binding TargetNullValue={}}"/>
</p:Style>
</Window.Resources>
<StackPanel>
<Label DataContext="{Binding Text1}"/>
<Label DataContext="{Binding Text2}"/>
<Label DataContext="{Binding Text3}"/>
</StackPanel>
</Window>
サンプルモデルクラスは、ちょうどもちろんの3つの簡単なstring
特性を有しています。
XAMLバインディング構文が非常に単純になるため、DataContext
が特に便利です。バインディングのデフォルトのソースはDataContext
であるため、指定する必要があるのはTargetNullValue
プロパティです。しかし、何らかの理由でソース値をDataContext
に直接保存したくない場合は、DataContext
の代わりにTag
プロパティを使用することができます。つまり、をにバインドしてDataContext
にバインドし、次にStyle
の通常どおりにモデルプロパティにバインドすることで、まったく新しいビューモデルを作成できます。重要なことは、Style
に一貫したソースプロパティを使用することです。同じStyle
をすべてのLabel
オブジェクトに適用することができます。
このようなバインディングに 'Content =" {Binding Prop、TargetNullValue = {}} "を使用する回避策が見つかりました。それでももっと良い解決策を探しています。 – Poma
現在使用している回避策は何ですか?それは私には合理的なようです。コントロールが完全に崩壊するのを防ぐ方法はたくさんありますので、あなたの質問ははるかに広すぎます。あなたの現在のコードがあなたのために(回避策を含む)うまくいかない理由を説明し、あなたが実際に欲しいものにヒットするために半ダースの答えを取らないように十分に希望の代替物を制約してください。 –
スタイルですべてのラベルに修正を適用するにはリンゴにしたい – Poma