Я не могу добавлять элементы в свой GUI, если у меня есть диаграмма из LiveCharts - PullRequest
0 голосов
/ 08 мая 2020

Теперь диаграмма больше не может изменять размер, я думаю, это связано с RowDefinitions (*) Я понимаю, что это занимает оставшееся место, но я хочу разместить кое-что еще под диаграммой. Если я правильно понял, вам нужно расположить свои строки и столбцы в том порядке, в котором вы хотите, чтобы ваши элементы

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <StackPanel Grid.Row="0" Grid.Column="0"
          Orientation="Horizontal"
          Margin="0,0,12,0">
        <StackPanel>
            <TextBlock Text="ComboBox1 Label" />
            <ComboBox />
        </StackPanel>
        <StackPanel>
            <TextBlock Text="ComboBox2 Label" />
            <ComboBox />
        </StackPanel>
    </StackPanel>

    <StackPanel Grid.Row="0" Grid.Column="1"
          Orientation="Horizontal"
          VerticalAlignment="Bottom"
          Margin="0,0,12,0">
        <RadioButton Content="Text" />
        <RadioButton Content="Text" />
        <RadioButton Content="Text" />
    </StackPanel>

    <StackPanel Grid.Row="1" Grid.Column="2"
          HorizontalAlignment="Left">
        <TextBlock Text="Button Label" />
        <Button Content="Text" />
    </StackPanel>

    <!--CartesianChart Grid.Row="2" 
              Grid.Column="0" 
              Grid.ColumnSpan="3" /-->

    <StackPanel Grid.Row="3" Grid.Column="0">
        <TextBlock Text="Button Label" />
        <Button Content="Text" />
    </StackPanel>

    <lvc:CartesianChart Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" HorizontalAlignment="Left" Height="100" Margin="129,136.2,0,0" VerticalAlignment="Top" Width="100"/>
</Grid>

Я хотел что-то вроде этого

1 Ответ

0 голосов
/ 08 мая 2020

Вы должны получить точку экрана относительно CartesianChart, иначе возвращаемая позиция будет относительно MainWindow (потому что вы передали this).
Прочтите this , чтобы получить немного больше подробное объяснение.

Я также упростил ваш код:

public ObservablePoint MovingPoint { get; set; }

private void ChartOnDataClick(object sender, ChartPoint p) //click on point
{
  var observablePointIndex = this.diagram.Series[0].Values
    .GetPoints(this.diagram.Series[0].Model.View)
    .ToList()
    .IndexOf(p);
  this.MovingPoint = this.diagram.Series[0].Values[observablePointIndex] as ObservablePoint;
}

private void ChartOnMouseMove(object sender, MouseEventArgs e)
{
  if (this.MovingPoint == null
      || e.LeftButton != MouseButtonState.Pressed)
    return;

  Point newPoint = this.diagram.ConvertToChartValues(e.GetPosition(this.diagram));
  this.MovingPoint.X = newPoint.X;
  this.MovingPoint.Y = newPoint.Y;
}

private void ChartOnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
  this.MovingPoint = null; // deactivate point moving
}

Пример Grid

Обратите внимание, что высота строки / столбца / width of * заставит строку / столбец растягиваться, чтобы занять максимальное пространство, когда родительский элемент, например, Window, растет. * - значение по умолчанию. Размер Auto заставляет строку / столбец корректировать свой размер в соответствии с содержимым.

При использовании строк / столбцов можно позволить элементу управления растягиваться на несколько строк / столбцов, указав Grid.RowSpan / Grid.ColumnSpan.

Чтобы диаграмма увеличивалась, высота строки, содержащей диаграмму, устанавливается на *. Для всех остальных строк установлено значение Auto.

Чтобы диаграмма могла растягиваться на все Grid, для Grid.ColumnSpan установлено значение 3 (поскольку Grid содержит три столбца).

Следующий пример основан на размещенном вами изображении:

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />
    <RowDefinition Height="Auto" />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>

  <StackPanel Grid.Row="0" Grid.Column="0"
              Orientation="Horizontal"
              Margin="0,0,12,0">
    <StackPanel>
      <TextBlock Text="ComboBox1 Label" />
      <ComboBox />
    </StackPanel>
    <StackPanel>
      <TextBlock Text="ComboBox2 Label" />
      <ComboBox />
    </StackPanel>
  </StackPanel>

  <StackPanel Grid.Row="0" Grid.Column="1"
              Orientation="Horizontal"
              VerticalAlignment="Bottom"
              Margin="0,0,12,0">
    <RadioButton Content="Text" />
    <RadioButton Content="Text" />
    <RadioButton Content="Text" />
  </StackPanel>

  <StackPanel Grid.Row="1" Grid.Column="2"
              HorizontalAlignment="Left">
    <TextBlock Text="Button Label" />
    <Button Content="Text" />
  </StackPanel>

  <CartesianChart Grid.Row="2" 
                  Grid.Column="0" 
                  Grid.ColumnSpan="3" />

  <StackPanel Grid.Row="3" Grid.Column="0">
    <TextBlock Text="Button Label" />
    <Button Content="Text" />
  </StackPanel>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...