Как выполнить тестирование Grid ColumnDefinition? - PullRequest
0 голосов
/ 29 ноября 2011

Я делаю вид дизайнера WPF.Я хочу узнать, ColumnDefinition я нажал, чтобы удалить его из сетки управления.Я позабочусь о тех детях, которые «находятся в этом ColumnDefinition».Могу ли я получить его из аргумента sender обработчика события click?Теперь я проверяю, находится ли e.GetPosition в диапазоне ColumnDefinition.ActualWidth, но мне интересно, есть ли более красивое решение.

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Из вашего обработчика событий клика:

int columnIndex = Grid.GetColumn((UIElement)sender);

где отправитель, если дочерний элемент прямой сетки.

0 голосов
/ 29 ноября 2011

Зачем вам в любом случае захватывать клик по ColumnDefinition? Виртуальный, у него нет реального тела, это всего лишь подсказка для Grid о том, как вы хотите расположить его содержимое. Поэтому вы должны установить обработчики для объектов содержимого, а не для ColumnDefinition.

Если вам действительно нужно зафиксировать щелчок по всей поверхности ячейки сетки, вы можете попытаться поместить внутри него белый (или другой цвет, такой же, как у фона) и зафиксировать щелчок.

Некоторые пояснения о том, как работает WPF Grid. Когда вы добавляете некоторые элементы управления в 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, которую вы можете видеть, что элементы управления не находятся внутри определений. Они используются как направляющие линейки для выравнивания содержимого. Затем вы устанавливаете вложенные свойства для элементов, чтобы указать сетке, куда вы хотите поместить свои элементы. Когда grid начинает компоновку, он увидит, что есть три элемента и три ColumnDefinitions, и попытается расположить элементы, как говорит ColumnDefinitions. Но если вы удалите или измените ColumnDefinitions во время выполнения, grid просто перестроит элементы управления по-новому. Если вы хотите скрыть некоторые элементы, вы должны скрыть их, а не ColumnDefinition.

...