Вопрос

Это может быть несложно для знатоков WPF, но я хотел бы знать, есть ли простой способ поместить текст на панель выполнения WPF.На мой взгляд, пустой индикатор выполнения выглядит голым.Это экранная недвижимость, которая может нести сообщение о что выполняется, или даже просто добавляет числа к представлению.Итак, WPF - это все о контейнерах и расширениях, и я постепенно обдумываю это, но поскольку я не вижу свойства "Text" или "Content", я думаю, мне придется добавить что-то в контейнер, который является моим индикатором выполнения.Есть ли какая-нибудь техника или две, которые были бы более естественными, чем мои оригинальные импульсы WinForms?Каков наилучший, наиболее естественный для WPF способ добавления текста в этот индикатор выполнения?

Это было полезно?

Решение

Если вам нужен повторно используемый метод добавления текста, вы можете создать новый Style / ControlTemplate, который имеет дополнительный TextBlock для отображения текста.Вы можете взломать свойство TextSearch.Прикрепленный текст, чтобы установить текст на индикаторе выполнения.

Если его не нужно использовать повторно, просто поместите индикатор выполнения в сетку и добавьте в нее текстовый блок.Поскольку WPF может составлять элементы вместе, это будет работать хорошо.

Если вы хотите, вы можете создать UserControl, который предоставляет ProgressBar и TextBlock в качестве общедоступных свойств, так что это потребует меньше работы, чем создание пользовательского ControlTemplate.

Другие советы

Оба предыдущих ответа (создание нового CustomControl или Adorner) являются лучшими практиками, но если вы просто хотите быстро и грязно (или визуально понять, как это сделать), то этот код будет работать:

<Grid Width="300" Height="50">  
   <ProgressBar Value="50" />
   <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
      My Text
   </TextBlock>
</Grid>

Просто имейте в виду, что z-индекс таков, что последний элемент в списке будет сверху.

Кроме того, если у вас нет Каксамл тем не менее, обязательно возьмите его в руки - он отлично подходит для игры с XAML, когда вы пытаетесь во всем разобраться.

Это может быть очень просто (если только не существует множества способов заставить это работать).

Вы могли бы использовать Style чтобы это сделать, или вы просто накладываете TextBlock и еще ProgressBar.

Я лично использую это, чтобы показать процент прогресса при ожидании завершения.

Чтобы все было очень просто, я всего лишь хотел иметь один Binding только, поэтому я прикрепил TextBock.Text к тому ProgressBar.Value.

                                           Затем просто скопируйте код, чтобы это сделать.

<Grid>
   <ProgressBar Minimum="0" 
                Maximum="100" 
                Value="{Binding InsertBindingHere}" 
                Name="pbStatus" />
   <TextBlock Text="{Binding ElementName=pbStatus, Path=Value, StringFormat={}{0:0}%}" 
           HorizontalAlignment="Center" 
           VerticalAlignment="Center" />
</Grid>

                                                Вот как это могло бы выглядеть:

                                    enter image description here

Проверьте Учебное пособие по WPF смотрите полный текст поста.

Вы могли бы использовать Декоратор для отображения текста поверх него.

Видишь Статья MSDN об украшателях

Вы бы создали класс, который наследуется от класса Adorner.Переопределите метод OnRender, чтобы нарисовать нужный текст.Если вы хотите, вы могли бы создать свойство зависимости для вашего пользовательского элемента оформления, содержащее текст, который вы хотите отобразить.Затем используйте пример по ссылке, которую я упомянул, чтобы добавить это украшение в слой украшения вашего индикатора выполнения.

Щелкните правой кнопкой мыши ProgressBar, и нажмите Редактировать шаблон > Отредактировать копию.

Затем положите TextBlock как показано ниже, чуть выше закрывающего тега Grid в Стиле, сгенерированном VS.

   <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/>
   <TextBlock Background="Transparent" Text="work in progress" Foreground="Black" TextAlignment="Center"/>
 </Grid>
 <ControlTemplate.Triggers>

Панель прогресса с текстом и привязкой из 2-х свойств ( Значение/Максимальное значение ):

<Grid>
    <ProgressBar Name="pbUsrLvl"
                 Minimum="1" 
                 Maximum="99" 
                 Value="59" 
                 Margin="5"  
                 Height="24"  Foreground="#FF62FF7F"/>
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock.Text>
            <MultiBinding StringFormat="{}UserLvl:{0}/{1}">
                <Binding Path="Value" ElementName="pbUsrLvl" />
                <Binding Path="Maximum" ElementName="pbUsrLvl" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</Grid>

Результат:

enter image description here


То же самое, но с процентом прогресса :

<Grid>
    <ProgressBar Name="pbLifePassed"
                 Minimum="0" 
                 Value="59" 
                 Maximum="100"
                 Margin="5" Height="24" Foreground="#FF62FF7F"/>
    <TextBlock Text="{Binding ElementName=pbLifePassed, Path=Value, StringFormat={}{0:0}%}" 
           HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top