Выберите ListViewItem, нажав на элементы управления в его DataTemplate - PullRequest
2 голосов
/ 07 июня 2011

Я написал собственный DataTemplate для элементов в ListView, что-то вроде этого:

 <DataTemplate x:Key="CustomerStateTemplate">
    <Grid Margin="5, 5, 5, 5">
        <Grid.ColumnDefinitions>
            ...
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            ...
        </Grid.RowDefinitions>

        <Image Grid.Row="0" Grid.RowSpan="2" Width="24" Height="20" ... />

        <TextBox Style="{StaticResource CustomerStyle}" Grid.Column="0" 
                       Grid.Row="0" Grid.ColumnSpan="2"
                       Name="nameField">
            <TextBox.Text>
                <Binding Path="Name" />
            </TextBox.Text>
        </TextBox>

        ...

, и я получил свой красивый стиль.Теперь, если я хочу выбрать элемент, я должен нажать на пустое пространство между элементами управления шаблона.Если я нажму на текстовое поле в ListViewItem, он не будет выделен как элемент.Итак, есть ли способ выбрать ListViewItem, нажав на элементы управления в его шаблоне?

Спасибо тысячи!

1 Ответ

6 голосов
/ 07 июня 2011

В ListViewItem можно добавить триггер, который всегда выбирает элемент, тогда фокус клавиатуры находится внутри элемента. Когда вы делаете это в ListViewItem, у вас одинаковое поведение для всех элементов управления внутри DataTemplate, которое должно быть вашим решением ...

пример:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <Grid>
  <Grid.Resources>
    <x:Array x:Key="Data" Type="{x:Type sys:String}">
      <sys:String>first</sys:String>
      <sys:String>second</sys:String>
      <sys:String>third</sys:String>
    </x:Array>
  <Style TargetType="ListViewItem" x:Key="itemStyle">
    <Style.Triggers>
      <Trigger Property="IsKeyboardFocusWithin" Value="True">
        <Setter Property="IsSelected" Value="True" />
      </Trigger>
    </Style.Triggers>
  </Style>
  </Grid.Resources>


  <ListView ItemsSource="{StaticResource Data}" ItemContainerStyle="{StaticResource itemStyle}">
    <ListView.ItemTemplate>
      <DataTemplate DataType="{x:Type sys:String}">
        <TextBox Text="{Binding .}">
        </TextBox>
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>
  </Grid>
</Page>

Надеюсь, все ясно ...

...