XAML 为什么在WPF视图中看不到Label控件的Content文本?

mjqavswn  于 2023-01-28  发布在  其他
关注(0)|答案(5)|浏览(192)

我有以下标记:

<StackPanel Grid.Row="0" Orientation="Horizontal">
    <StackPanel Orientation="Horizontal" Visibility="{Binding OrgListVisibility}">
        <Label Content="Org:" />
        <ComboBox ItemsSource="{Binding OrgSelectList, NotifyOnSourceUpdated=True}" SelectedValuePath="Key" DisplayMemberPath="Value" SelectedItem="{Binding OrgId}" />
    </StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="{Binding BranchListVisibility}">
        <TextBlock Text="Branch:" Style="{StaticResource FormLabel}" />
        <ComboBox x:Name="BranchList" ItemsSource="{Binding BranchSelectList}" SelectedValuePath="Key" DisplayMemberPath="Value" SelectedItem="{Binding BranchId}" />
    </StackPanel>
</StackPanel>

然而,当我运行这个应用程序时,只有TextBlock的文本是可见的,而Label的文本是不可见的。后者在可视树中,在最深处有一个TextBlock,但这是我所能看到的。

**根据要求:**以下是FormLabel的样式:

<Style TargetType="TextBlock" x:Key="FormLabel">
    <Setter Property="Height" Value="20" />
    <Setter Property="Margin" Value="10" />
    <Setter Property="TextAlignment" Value="Right" />
    <Setter Property="VerticalAlignment" Value="Center" />
</Style>

**一个类似的问题:**当我把一个组合框绑定到一个泛型类的示例集合时,我发现了一个几乎类似的问题。项目的文本没有显示,但它们出现在组合框中。通过知道我所寻找的项目的位置来选择一个组合框,正确地级联到第二个组合框,它有可见的项目,我可以看到正确的但不可见的项目已经被选择。

一旦我将项目源更改为非通用对象列表,下拉列表中的项目就再次可见。

rpppsulh

rpppsulh1#

代码看起来很好,正如你在注解部分提到的,它占用布局空间,那么很可能发生的是,你的标签的颜色和包含布局的背景色是相同的。
要解决此问题,请尝试为标签提供一些不同的背景色和前景色,例如红色或蓝色。希望这会有所帮助

crcmnpdw

crcmnpdw2#

Ctrl+Q -〉实时可视化树
然后点击“pick element”按钮并选择你的标签。检查以下属性:
Visibility
Opacity
Content
同时检查Label的子元素。设置Content应该会得到如下的树:

如果默认样式更改了控件模板,则可能无法在此处看到作为子级的TextBlock。另外,钻取TextBlock并确保它具有正确的Text属性。然后确保它和它的所有父节点具有正确的OpacityVisibility。此外,通过选择内部TextBlock并在实时视觉化树窗口中打开突出显示功能,确保为它分配了空间。

ckx4rj1h

ckx4rj1h3#

你能试试这段代码看它是否有效吗?

<Grid Grid.Row="0">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <StackPanel Grid.Column="0"
                Orientation="Horizontal" Visibility="{Binding OrgListVisibility}">
        <Label Content="Org:" />
        <ComboBox ItemsSource="{Binding OrgSelectList, NotifyOnSourceUpdated=True}" 
                      SelectedValuePath="Key" 
                      DisplayMemberPath="Value" 
                      SelectedItem="{Binding OrgId}" />
    </StackPanel>
    <StackPanel Grid.Column="1"
                Orientation="Horizontal" Visibility="{Binding BranchListVisibility}">
        <TextBlock Text="Branch:" Style="{StaticResource FormLabel}" />
        <ComboBox x:Name="BranchList" 
                      ItemsSource="{Binding BranchSelectList}" 
                      SelectedValuePath="Key" 
                      DisplayMemberPath="Value" 
                      SelectedItem="{Binding BranchId}" />
    </StackPanel>
</Grid>
rmbxnbpk

rmbxnbpk4#

当标签为Visibility == Hidden时,不可见时,标签将占用布局空间。您应检查并确保应用程序未为TargetType="Label"定义全局样式(无键样式),其中可设置此值:

<Style TargetType="Label"> !!!note that this has no 'Key' associated
      [...]
    <Setter Property="Visibility" Value="Hidden" />
      [...]
</Style>

这不需要在同一个xaml文件中才能自动应用,您应该检查全局字典或文件中链接的任何其他ResourceDictionary。

xlpyo6sf

xlpyo6sf5#

我也遇到了同样的问题。原来是标签高度太小了。增加了高度,它的内容就变得可见了。

相关问题