Почему в моем представлении WPF текст содержимого элемента управления Label не отображается?

У меня есть следующая разметка:

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

СХОДНАЯ ПРОБЛЕМА: Я нашел почти аналогичную проблему с combobox, когда привязал ее к коллекции экземпляров универсального класса. Текст элементов просто не показывался, но они присутствовали в списках. Выбор на одном, зная, что позиция моего искомого элемента правильно каскадирована во второе поле со списком, которое имеет видимые элементы, и я мог видеть, что был выбран правильный, но невидимый элемент.

Как только я сменил источник элемента на список не общих объектов, элементы в раскрывающемся списке были снова видны.

Ответ 1

Код выглядит прекрасно, и, как вы уже упоминали в разделе комментариев, он занимает пространство макета, поэтому вполне может случиться, что цвет вашей метки и цвет фона содержащего макета будут одинаковыми.

Чтобы устранить эту проблему, попробуйте дать несколько разных цветов фона и переднего плана, например. красного или синего цвета на этикетке. Надеюсь, что это поможет

Ответ 2

Ярлык займет пространство макета, а не будет видно, когда его Visibility == Hidden. Вы должны проверить и убедиться, что ваше приложение не определяет глобальный стиль (один без ключа) для TargetType="Label", где это значение может быть установлено:

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

Это не обязательно должно быть в одном файле xaml, чтобы автоматически применяться, вы должны проверить глобальный словарь или любой другой ResourceDictionary, связанный в файле.

Ответ 3

Ctrl + Q → Живое визуальное дерево

Затем нажмите кнопку "выбрать элемент" и выберите свою метку. Проверьте следующие свойства:

Visibility
Opacity
Content

Также проверьте дочерние элементы метки. Настройка содержимого должна приводить к следующему дереву:

Ярлык визуального дерева

Если стиль по умолчанию изменил шаблон управления, вы можете не видеть TextBlock в качестве ребенка здесь. Также сверлите в TextBlock и убедитесь, что он имеет правильное свойство Text, а затем убедитесь, что он и все его родители имеют права Opacity и Visibility. Также убедитесь, что для внутреннего блока TextBlock выделено место, выбрав его и включив функцию подсветки в окне живого визуального дерева.

Ответ 4

Можете ли вы попробовать этот код, чтобы узнать, работает ли он?

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