为什么在我的WPF视图中我的Label控件的内容文本不可见?

时间:2017-01-30 05:21:21

标签: wpf xaml

我有以下标记:

<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的文字。后者位于Visual Tree中,内部有TextBlock,但就我所见。

AS REQUESTED:以下是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>

一个类似的问题: 当我将它绑定到泛型类的实例集合时,我发现了一个与组合框几乎相似的问题。物品&#39;文本根本没有显示,但它们存在于组合框中。通过知道我所寻找的物品的位置正确地级联到具有可见物品的第二个组合框来选择一个,并且我可以看到已经选择了正确但不可见的物品。

只要我将项目来源更改为非通用对象列表,下拉列表中的项目就会再次显示。

4 个答案:

答案 0 :(得分:2)

代码看起来很好,正如您在评论部分中提到的那样,它需要布局空间,然后很可能会发生标签的颜色和包含布局的背景颜色相同。

要解决此问题,请尝试提供一些不同的背景和前景色,例如红色或蓝色到标签。希望这有帮助

答案 1 :(得分:1)

Ctrl + Q - &gt;实时视觉树

然后点击“选择元素”按钮并选择您的标签。检查以下属性:

Visibility
Opacity
Content

还要检查Label的子元素。设置内容应该产生如下树:

Label visual tree

如果默认样式更改了控件模板,则可能不会在此处将TextBlock视为子项。同时深入查看TextBlock并确保它具有正确的Text属性,然后确保它及其所有父项具有正确的OpacityVisibility。还要确保内部TextBlock通过选择它并打开实时可视树窗口中的突出显示功能来为其分配空间。

答案 2 :(得分:0)

您可以尝试使用此代码查看它是否有效吗?

 <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>

答案 3 :(得分:0)

标签会占用布局空间,而在其Visibility == Hidden时可见。您应该检查并确保您的应用程序没有为TargetType="Label"定义可以设置此值的全局样式(没有密钥的样式):

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

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