Активируемый элемент ItemsControl в WPF - PullRequest
7 голосов
/ 28 августа 2011

Я использую ItemsControl для отображения списка связанных с данными элементов, для каждого ядра DataTemplate есть Grid, на котором я поместил все связанные элементы управления.

Я хотел бы иметь возможность щелкнуть всю область для каждого элемента в списке. Но я не могу понять, как сделать область кликабельной.

Любые предложения о том, как сделать всю область сетки кликабельной, были бы великолепны.

Ответы [ 2 ]

14 голосов
/ 28 августа 2011

Чтобы сделать что-то кликабельное, вы обычно можете обернуть его в кнопку, если оно должно быть «невидимым», вы можете изменить шаблон:

<Button.Template>
    <ControlTemplate TargetType="{x:Type Button}">
        <ContentPresenter />
    </ControlTemplate>
</Button.Template>
4 голосов
/ 28 августа 2011

Для этого можно использовать классы AttachedCommandBehavior из C # Disciples .

Определить команду в ViewModel, а затем для объекта Grid использовать ACB AttachedProperties для привязки MouseLeftButtonUp событие для команды.

Некоторый код для начала работы:

        <Grid Name="grid" Height="30" ForceCursor="True" Cursor="Hand">
            <acb:CommandBehaviorCollection.Behaviors>
                <acb:BehaviorBinding Event="MouseLeftButtonUp" Command="{Binding Path=DataContext.EditEventCommand, RelativeSource={RelativeSource AncestorType={x:Type self:Dashboard}}}" CommandParameter="{Binding}" />
            </acb:CommandBehaviorCollection.Behaviors>
        </Grid>

Редактировать для решения, не относящегося к MVVM.

Приведенный выше фрагмент кода будет работать, даже если вы не разработали свое приложение, следуя рекомендациям MVVM, поскольку по сути просто привязываетесь кКоманда в коде позади.

Однако, если вы не хотите заниматься определением команд, вы можете просто указать событие, к которому нужно подключиться, например:

<Grid MouseLeftButtonUp="Grid_MouseLeftButtonUp"> в файле XAML.

и в коде:

    private void Grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
    }        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...