#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, и он должен выполнить всю работу за вас