gpt4 book ai didi

c# - 如何防止内容为空的标签折叠?

转载 作者:行者123 更新时间:2023-11-30 16:03:27 24 4
gpt4 key购买 nike

我有一张带有几个标签的表格:

<StackPanel Margin="20">
<Label Padding="0" Content="1" />
<Label Padding="0" />
<Label Padding="0" Content="3" />
<Label Padding="0" Content="4" />
</StackPanel>

当标签内容为空(绑定(bind)返回 null)时,它会折叠。如何防止这种情况?如果 Content 包含空字符串,则一切正常。

当前行为:

enter image description here

预期结果:

enter image description here

我目前在每个 Label 的绑定(bind)中使用 TargetNullValue={} 来防止控件折叠。但我想要一个允许我在 StackPanel 中使用 Label 控件的解决方案,我可以在其中使用 Style 来防止崩溃,而不是而不必在每个 Label 的每个绑定(bind)中设置 TargetNullValue 属性。

最佳答案

StackPanel 不会为其子级提供比他们要求的更多的空间。如果 Label 控件没有内容并且您没有明确设置尺寸,则它不会要求任何空间。请注意,设置 Height 足以满足您声明的目的,但是 Label 的视觉高度当然不取决于内容,而是取决于该显式设置。

我相信您现在使用的解决方法是合理的。它确保内容实际上永远不会是 null,因此 Label 控件将始终请求一个高度来容纳给定的内容,即使字符串为空也是如此。

您在评论中声明您希望能够通过 Style 应用此解决方法。如果您愿意更改模型绑定(bind)的目标属性,只需将模型绑定(bind)到 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; }
}

自然地,您会使用适合您的情况的任何模型和绑定(bind)。

我发现 DataContext 特别方便,因为它使 XAML 绑定(bind)语法非常简单;绑定(bind)的默认源是 DataContext 本身,因此您只需指定 TargetNullValue 属性即可。但是,如果出于某种原因您不想将源值直接存储在 DataContext 中,您可以使用 Tag 属性代替 DataContext如果你想要的话。或者就此而言,您可以创建一个全新的 View 模型,将 that 绑定(bind)到 DataContext,然后像往常一样在 Style< 中绑定(bind)到模型属性。重要的是 Style 具有一致的源属性供使用,因此相同的 Style 可以应用于所有 Label 对象。

关于c# - 如何防止内容为空的标签折叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com