的StackPanel
不會給它的孩子比他們問任何更多的空間對於。如果沒有內容,並且您沒有明確設置維度,則Label
控件不會請求任何空間。請注意,設置Height
就足以滿足您的陳述目的,但當然,Label
的視覺高度不取決於內容,而是取決於該明確設置。
我相信你現在使用的解決方法是合理的。它確保內容永遠不會實際上爲null
,因此Label
控件將始終要求高度來容納給定的內容,即使該字符串爲空。
您在評論中聲明您希望能夠通過Style
應用此解決方法。如果您願意更改模型綁定的目標屬性,則可以簡單地將模型綁定到Label.DataContext
屬性,然後Style
從DataContext
設置Content
。
例如:
<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>
樣品模型類只是具有當然的三個簡單string
屬性:
class Model
{
public string Text1 { get; set; }
public string Text2 { get; set; }
public string Text3 { get; set; }
}
當然,你會用什麼模型和綁定在你的情況適合。
我發現DataContext
特別方便,因爲它使得XAML綁定語法非常簡單;綁定的默認源是DataContext
本身,所以您只需指定TargetNullValue
屬性。但如果由於某種原因,您不想直接在DataContext
中存儲源值,則可以使用Tag
屬性代替DataContext
,如果需要的話。或者就此而言,您可以創建一個全新的視圖模型,將與綁定爲DataContext
,然後像Style
中一樣綁定到model屬性。重要的是Style
有一個一致的源屬性使用,所以相同的Style
可以應用於所有的Label
對象。
找到一種解決方法,對這種綁定使用'Content =「{Binding Prop,TargetNullValue = {}}」''。仍在尋找更好的解決方案。 – Poma
現在使用的解決方法有什麼問題?這對我來說似乎是合理的。有很多方法可以防止控制完全崩潰,所以現在問你的問題太廣泛了。請解釋爲什麼你當前的代碼不適合你(包括解決方法),並且限制所需的替代方法,以至於不需要半打答案來擊中你真正想要的那個。 –
我想成爲蘋果,將修補程序應用於所有帶有Style的標籤 – Poma