Как сделать пользовательские метки для слайдера в WPF - PullRequest
0 голосов
/ 21 февраля 2020

Я создаю интерфейс, где пользователь сможет нажимать на слайдер. Я хочу, чтобы ярлыки были связаны рядом с их числовым значением. 100 должен сказать идеально. 75 должен сказать очень хорошо. 50 должен сказать средний. 25 должен сказать ниже среднего и 0 должен сказать не удалось. (См. Ниже) Я попытался использовать конвертеры, и они потерпели неудачу, и я попытался использовать шаблоны управления, и они потерпели неудачу. Любая помощь будет оценена. Спасибо.

--- Отлично (на отметке 100)
|
|
- Очень хорошо (на отметке 75)
|
|
- Среднее (на отметке 50)
|
|
- Ниже среднего (на отметке 25)
|
|
--- Сбой (на отметке 0)

1 Ответ

0 голосов
/ 21 февраля 2020

Когда все ваши попытки по этой теме потерпели неудачу:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/8d64b2dc-4dfd-4b05-aa95-e24aaaed53af/i-want-to-add-lables-with-text-in-ticks-of-slider?forum=wpf
У меня есть быстрое и грязное решение для вас: поместите ваш слайдер в сетку и в следующем ряду (для горизонтального слайдера это будет столбец для вертикального слайдера) поместите достаточно столбцов (или рядов для вертикального слайдера) для размещения ваших меток, например:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Slider Grid.ColumnSpan="9" Minimum="0" Maximum="100" Ticks="0, 25, 50, 75, 100" IsSnapToTickEnabled="True" Margin="3" />
    <Label Content="Failed" Grid.Row="1" Style="{StaticResource TickLabel}" />
    <Label Content="Below average" Grid.Row="1" Grid.Column="2" Style="{StaticResource TickLabel}" />
    <Label Content="Average" Grid.Row="1" Grid.Column="4" Style="{StaticResource TickLabel}" />
    <Label Content="Above average" Grid.Row="1" Grid.Column="6" Style="{StaticResource TickLabel}" />
    <Label Content="Perfect" Grid.Row="1" Grid.Column="8" Style="{StaticResource TickLabel}" />
</Grid>

И для стиля метки :

<UserControl.Resources>
    <Style TargetType="Label" x:Key="TickLabel">
        <Style.Setters>
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <RotateTransform Angle="-90" />
                </Setter.Value>
            </Setter>
            <Setter Property="Margin" Value="-3" />
            <Setter Property="HorizontalContentAlignment" Value="Right" />
        </Style.Setters>
    </Style>
</UserControl.Resources>

Если вам нужно больше таких и с разными метками / размещением меток, я бы создал пользовательский элемент управления, где содержимое меток (и их положение) задается как Dictionary<double, string>, где позиция находится в диапазоне от 0,0 до 1,0 (процент от полного диапазона ползунка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...