WPF: Существует ли какой-либо тег XAML, который ведет себя подобно элементу HTML span?

#wpf #field #required

#wpf #поле #требуется

Вопрос:

Исходит из ASP.NET этот материал WPF просто сбивает с толку. Все, что я хочу сделать, это поставить красную звездочку рядом с меткой, чтобы указать обязательное поле. Поиграв с материалом, я обнаружил, что это действительно помогает:

 <TextBlock Grid.Row="6" Height="28" HorizontalAlignment="Left" VerticalAlignment="Top">
    <Label Foreground="Red" Content="*" /><Label Content="Heavy Weight" />
</TextBlock>
  

Поскольку я только что придумал это, я не уверен, что это академический путь, который выбрал бы опытный разработчик WPF. Кроме того, эта разметка помещает огромное количество пробелов между звездочкой и меткой. В HTML элемент span будет просто отображаться рядом со своим следующим родственным элементом. К вашему сведению, я пытался поместить метку внутри метки, но VS2010 продолжал кричать о том, что «Свойство ‘content’ устанавливается более одного раза».

Есть идеи?

Ответ №1:

Что-то вроде этого было бы более подходящим:

 <TextBlock Grid.Row="6" Height="28" HorizontalAlignment="Left" VerticalAlignment="Top">
    <Span Foreground="Red">*</Span>Heavy Weight
</TextBlock>
  

Здесь приведен обзор того, что может входить в содержимое текстового блока, более конкретно здесь.

Ответ №2:

еще один способ

 <TextBlock Grid.Row="6" Height="28" HorizontalAlignment="Left" VerticalAlignment="Top">
    <Run Foreground="Red" Text="*" />
    <Run Text="Heavy Weight" />
</TextBlock>
  

кстати
Решение Damascus добавляет больше элементов пользовательского интерфейса.
с решением CodeNaked сложно привязать текст к данным.

Комментарии:

1. забыл упомянуть. Свойство Run Text может быть привязано к данным только после определенного . сетевая версия.

Ответ №3:

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

Просто пример кода предложения с красной звездочкой, который я недавно сделал:

 <StackPanel  Orientation="Horizontal" Margin="5" >
            <TextBlock Text="Display name"/>
            <TextBlock Text="*" Foreground="Red" FontWeight="Bold" />
            <TextBlock Text=":"/>
        </StackPanel>
  

Там все находится в StackPanel , поэтому свойство ‘content’ фактически будет установлено один раз (если вы не укажете групповую панель, подобную этой, вам придется добавить только один элемент)

Комментарии:

1. Это определенно тот более академический маршрут, который я искал. Однако, хотя это и более уместно, весь текст сгруппирован в верхнем левом углу моей ячейки сетки. Когда я меняю текстовые блоки на метки, я все равно получаю пробел. Я списываю это на проблему с заполнением. Если я задаю padding = 0, элемент перемещается как можно дальше вниз и влево. Я думаю, что мог бы удалить заполнение только слева или справа. Я проверю это.

2. Обычно ваш текст застрял в верхнем левом углу — вы указываете это: HorizontalAlignment="Left" VerticalAlignment="Top" . Измените эти два значения на Center, и он должен выполнить всю работу за вас