Silverlight Scrollviewer только с кнопками

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

# df = your dataframe with all the data

towns = ['A', 'B', 'C']

for town in towns:
    town_df = df[df['town'] == town]
    plt.plot(town_df['week'], town_df['price'], label=town)

plt.legend()
plt.xlabel('Week') 
plt.ylabel('Price') 
plt.title('Price Graph')
plt.show()

Вывод:

enter image description here

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

5
задан Nick 17 December 2008 в 17:13
поделиться

2 ответа

Вот другая опция. Переопределите шаблон по умолчанию для SCrollviewer и обработайте кнопки как PageUp/PageDown. Моим примером ниже является scrollviewer, который прокручивает вертикально. Можно легко измениться на к горизонтальной прокрутке и изменить обработчики с PageUp/PageDown на Левые и правые обработчики.

<ControlTemplate TargetType="{x:Type ScrollViewer}" x:Key="ButtonOnlyScrollViewer">
        <ControlTemplate.Resources>
            <!-- Add style here for repeat button seen below -->
        </ControlTemplate.Resources>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

            <RepeatButton Grid.Row="0"
                          Foreground="White" 
                          Background="Yellow" 
                          HorizontalAlignment="Stretch" 
                          Command="ScrollBar.PageUpCommand"
                          Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}">
            </RepeatButton>

            <ScrollContentPresenter
                CanContentScroll="{TemplateBinding CanContentScroll}"
                Grid.Row="1" 
                Content="{TemplateBinding Content}"  
                Width="{TemplateBinding Width}"
                Height="{TemplateBinding Height}" 
                Margin="{TemplateBinding Margin}"/>

            <RepeatButton Grid.Row="2" Background="Black" Foreground="White" Command="ScrollBar.PageDownCommand">
            </RepeatButton>
        </Grid>
    </ControlTemplate>
2
ответ дан 15 December 2019 в 01:13
поделиться

Я сделал что-то подобное и лучший способ, которым я нашел, чтобы сделать, это должно было поместить Ваше содержание в средство просмотра прокрутки и просто выключить полосы прокрутки. Затем кодируйте свои кнопки для прокрутки scrollviewer.

Править: Ответ на комментарий ни о каком способе иметь дело с калибровкой.

Прежде всего Вы создали бы это управление как ContentControl. Этому нужно определить шаблон в generic.xaml, который имеет Ваши кнопочные управления плюс средство просмотра прокрутки. Что-то как:

<Canvas x:Name="root">
  <Button x:Name="left" Content="<"/>
  <Button x:Name="right" Content=">"/>
  <ScrollViewer x:Name="viewer" BorderThickness="0" VerticalScrollBarVisibility="Hidden">
    <ContentPresenter />
  </ScrollViewer>
</Canvas>

Затем в Вашем управлении необходимо было бы переопределить OnApplyTemplate:

public override void OnApplyTemplate()
{
  base.OnApplyTemplate();

  left = GetTemplateChild("left") as Button;
  left.Click += new RoutedEvent(YourHandler);
  right = GetTemplateChild("right") as Button;
  right.Click += new RoutedEvent(YourHandler);
  // position your scroll buttons here, not writing that code
  scroll = GetTemplateChild("viewer") as ScrollViewer;
  root = GetTemplateChild("root") as Canvas;

  var fe = this.Content as FrameworkElement;
  if (fe != null)
  {
    fe.SizeChanged += new SizeChangedEventHandler(fe_SizeChanged);
  }
}

void  fe_SizeChanged(object sender, SizeChangedEventArgs e)
{
  this.InvalidateMeasure();
}

protected override Size ArrangeOverride(Size finalSize)
{
  if (!double.IsInfinity(scroll.ViewportHeight))
  {
     left.Visibility = (scroll.HorizontalOffset > 0);
     right.Visibility = (scroll.HorizontalOffset < ScrollableHeight);
  }
  return base.ArrangeOverride(finalSize);
}

protected override Size MeasureOverride(Size availableSize)
{
  scroll.Measure(availableSize);
  return scroll.DesiredSize;
}

В Ваших обработчиках нажатий кнопки необходимо было бы (1) было бы прокрутить средство просмотра и (2) было бы проверить новое значение HorizontalOffset, чтобы видеть, необходимо ли скрыть или показать любую из кнопки.

Отказ от ответственности: Этот код, вероятно, не работает, как, так как он был записан вручную и на основе другого примера.

1
ответ дан 15 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: