ColumnDefinition позиция в сетке

Я пытаюсь выяснить, если ColumnDefinition знает, что это положение внутри Grid или нет.

У меня есть 3 столбца следующим образом:

<Grid.ColumnDefinitions>
  <ColumnDefinition Name="Left" Width="120" MouseEnter="Grid_MouseEnter" MouseLeave="Grid_MouseLeave"/>
  <ColumnDefinition/>
  <ColumnDefinition Width="120" MouseEnter="Grid_MouseEnter" MouseLeave="Grid_MouseLeave"/>
</Grid.ColumnDefinitions>

<view:Button Grid.Column="0" x:Name="GoLeft" Visibility="Hidden"/>
<view:MarkBox Grid.Column="1" x:Name="MarkBox1"
              MinHeight="110" MinWidth="100" Width="100" Height="110"/>
<view:Button Grid.Column="2" x:Name="GoRight" Visibility="Hidden"/>

И я хочу применить то же самое MouseEnter Функция на обоих, поставить выполнять разные действия, если это слева или справа ColumnDefinition, Есть ли ColumnDefinition иметь свойство, содержащее его номер или позицию внутри Grid?

1 ответ

События мыши на GridColumn не работают на меня.

Но каждый UIElement дитя Grid может иметь обработчик событий мыши. Например:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
  </Grid.ColumnDefinitions>

  <Border Grid.Column="0" Background="Red" MouseEnter="OnMouseEnter"/>

  <Grid Grid.Column="1" Background="Green" MouseEnter="OnMouseEnter"/>

  <Rectangle Grid.Column="2" Fill="Blue" MouseEnter="OnMouseEnter"/>
</Grid>

Как видите, я прикрепил тот же обработчик событий для MouseEnter событие на разных элементах управления: Border, Grid, Rectangle... Каждый элемент управления имеет позицию относительно родителя Grid (Grid.Row, Grid.Column), поэтому в обработчике событий вы можете проверить AttachedProperty sender:

private void OnMouseEnter(object sender, MouseEventArgs e)
{
    var element = sender as UIElement;

    var columnIndex = element.GetValue(Grid.ColumnProperty);

    // use columnIndex somehow...
}
Другие вопросы по тегам