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...
}