wpf индикатор выполнения привязки к значению списка - PullRequest
0 голосов
/ 24 мая 2011

Как я могу переместить значение индикатора выполнения (я моделирую круговую шкалу скорости автомобиля, используя индикатор выполнения) в соответствии со значением в списке или в поле со списком? Я использую прямоугольник для иглы.

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

Можно ли это сделать?

я покажу только тот код, который, я думаю, вам нужно увидеть .. вот фотография того, о чем я говорю:

enter image description here

<Window.Resources>
<ControlTemplate x:Key="templateSpeedometer"
                     TargetType="ProgressBar">
    <ControlTemplate.Resources>
        <Style TargetType="Line">
        </Style>
    </ControlTemplate.Resources>


        <Canvas Width="0" Height="0" 
                    RenderTransform="1 0 0 1 0 50" Background="#FFF50D0D">

            <Rectangle Name="PART_Track" Width="180" />
            <Rectangle Fill="Black" Name="PART_Indicator" />



            <Polygon Points="5 2 5 -5 -75 0"
                         Stroke="Black" Fill="Gold">
                <Polygon.RenderTransform>
                    <RotateTransform 
                            Angle="{Binding ElementName=PART_Indicator, 
                                            Path=ActualWidth}" />
                </Polygon.RenderTransform>
            </Polygon>
        </Canvas>
    </Border>
</ControlTemplate>
</Window.Resources>

<Grid x:Name="LayoutRoot">

    <StackPanel>
        <Grid Height="216" Name="grid1" Width="612">
            <ScrollBar Name="scroll" Orientation="Horizontal" Minimum="0" Maximum="100" SmallChange="1" LargeChange="10" Margin="8,235,4,-36" />
            <Border Background="#FF5EB6D8"  CornerRadius="25" Height="247" VerticalAlignment="Top" Margin="13,5,27,0">

            <ProgressBar Background="#FFD6E1E5" Margin="4,8,0,112" Maximum="100" Minimum="0" Template="{StaticResource templateSpeedometer}" Value="{Binding ElementName=scroll, Path=Value}" BorderBrush="#FF5EB6D8" OpacityMask="White" HorizontalAlignment="Left" Width="281" BorderThickness="5,1,1,1" Orientation="Vertical"/>
            </Border>

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Да, это можно сделать.Если у вас есть список значений, отображаемый в ListBox (или ComboBox), вы можете привязать выбранное значение через свойство SelectedItem .

Для потенциально лучшего общего дизайнадля вашего контроля, посмотрите на этот пост:

http://www.scottlogic.co.uk/blog/colin/2011/02/a-circular-progressbar-style-using-an-attached-viewmodel/

1 голос
/ 24 мая 2011

Я бы изменил дизайн templateSpeedometer, используя свойство Value (индикатора выполнения) и преобразовав Value в угол, используя ValueConverter.

<RotateTransform  
    Angle="{RelativeSource={RelativeSource TemplatedParent}, Path=Value, 
            Converter={StaticResource valueToAngleConverter}}" />                                    

Таким образом, вы можете связать Valueдатчика на TrackBar, ScrollBar, ListBox.SelectedValue или все, что вам нравится.

РЕДАКТИРОВАТЬ

Я изменил код см. здесь, почему я переключился с TemplateBindingсвязать с RelativeSource .

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