Я делаю вид дизайнера WPF. Я хочу узнать, ColumnDefinition
я нажал, чтобы удалить его из управления сеткой. Я позабочусь о тех детях, которые «находятся в этом ColumnDefinition». Могу ли я получить его из аргумента sender
обработчика события клика? Теперь я проверяю, находится ли e.GetPosition
в диапазоне ColumnDefinition.ActualWidth
, но мне интересно, есть ли более красивое решение.
Как проверить определение столбца сетки?
Ответы (2)
Из обработчика события клика:
int columnIndex = Grid.GetColumn((UIElement)sender);
где отправитель является дочерним элементом прямой сетки.
Зачем вам вообще нужно фиксировать щелчок на ColumnDefinition? Является виртуальным, у него нет реального тела, это всего лишь подсказка для Grid о том, как вы хотите разместить его содержимое. Таким образом, вы должны установить обработчики для объектов контента, а не для ColumnDefinition.
Если вам действительно нужно зафиксировать щелчок по всей поверхности ячейки сетки, вы можете попробовать поместить внутри нее белый (или другой цвет, такой же, как фон) Reactangle и зафиксировать щелчок по нему.
Некоторое пояснение о том, как работает WPF Grid. Когда вы добавляете некоторые элементы управления в сетку, все они становятся ее дочерними элементами.
<Grid>
<Button/>
<TextBox/>
<Label/>
</Grid>
И все они будут отображаться независимо от того, как вы настроили Column или RowDefinitions. Column и RowDefinitions только сообщают Grid, как вы хотите объединить все существующие элементы внутри него, но они не являются контейнерами, они не содержат элементов внутри.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button/><!-- this is identical to Grid.Column="0"-->
<TextBox Grid.Column="1"/>
<Label Grid.Column="2"/>
</Grid>
В этом примере мы создали три ColumnDefinitions, даже из сетки XAML вы можете видеть, что элементы управления не находятся внутри определений. Они используются так же, как направляющие линейки для выравнивания содержимого. Затем вы устанавливаете прикрепленные свойства для элементов, чтобы сообщить сетке, где вы хотите поместить свои элементы. Когда сетка начнет компоновку, она увидит, что есть три элемента и три ColumnDefinitions, и попытается расположить элементы так, как говорит ColumnDefinitions. Но если вы удалите или измените ColumnDefinitions во время выполнения, сетка просто перестроит элементы управления по-новому. Если вы хотите скрыть некоторые элементы, вам нужно скрыть их, а не ColumnDefinition.