Почему в моем представлении 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>