Пользовательский текст метки индикатора выполнения через привязку - PullRequest
1 голос
/ 31 мая 2010

Я играл с настройкой индикатора выполнения в приложении Silverlight. Чего я хочу достичь, так это иметь метку индикатора выполнения, отображающую текущее состояние в следующем формате: «Значение / Максимум». Таким образом, пользователь увидит, каково текущее значение и каково максимально возможное значение. Вот стиль для индикатора выполнения, который я использую:

<Style x:Key="ProgressBarStyle" TargetType="ProgressBar">
        <Setter Property="Width" Value="97.21" />
        <Setter Property="Height" Value="19" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ProgressBar">
                    <Canvas x:Name="LevelField" Width="99" Height="21">
                        ...
                    <TextBlock ... DataContext="{TemplateBinding Value}" Text="{Binding Converter={StaticResource DecNumberToStringConverter}}"/>
                    </Canvas>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Способ, которым я хочу реализовать это, состоит в том, чтобы иметь преобразователь значений, который преобразует текущее значение и максимально возможное значение в правильную строку. Это работает правильно, если написано как выше. Тем не менее, я также должен предоставить ConverterParameter для Convertor, но не уверен, как это сделать. Когда я пишу так: ConvertParameter = {Binding Maximum}, при запуске показывается ошибка, что атрибут Text не найден в TextBlock. Я также пытался установить DataContext как {RelativeSource Self}, но затем он не отображал ошибку, что атрибут DataContext не найден.

Как правильно сделать метку описанного индикатора выполнения?

Ответы [ 2 ]

0 голосов
/ 01 июня 2010

Попробуйте привязать TextBox к родительскому элементу, и тогда ваш преобразователь значений сможет получить доступ как к значению, так и к максимуму. {Binding RelativeSource={RelativeSource TemplatedParent}}.

Тогда ваш преобразователь значений может преобразовать объект в ProgressBar и использовать значения напрямую.

0 голосов
/ 31 мая 2010

Хорошо, похоже, я нашел один из способов. Он не самый лучший, но работает, если вам не нужно универсальное решение. Итак, все, что я делаю, это создаю более 1 стиля индикатора выполнения, а затем в каждом типе индикатора выполнения указываю его тип в качестве строкового параметра для преобразователя.

Затем в конвертере (этот остается неизменным для всех индикаторов выполнения), я проверяю параметр и задаю себе, каково максимальное число для этой панели инструментов, используя константу или прямой запрос максимального значения индикатора выполнения.

Хотя все равно хотелось бы услышать универсальное решение.

...