Я хочу запросить различные типы свойств у пользователя моего приложения WPF. Поэтому у меня есть ListView
, то есть ItemsSource
связывается с ObservableCollection<PropertiesBase>
. Каждое свойство происходит от PropertiesBase
. Поскольку опытный пользователь должен иметь возможность редактировать эти свойства, DataTemplate
выбирается в зависимости от свойства EditMode
и типа свойства.
Отображение данных и все остальное работает нормально, , за исключением того, что я не могу выбрать ListViewItem. Только когда я щелкаю текстовое поле внутри ListViewItem
или первых нескольких пикселей элемента, который я могу выбрать предмет.
Выбор работает только на белую часть элемента
Я пытался поиграть с Focusable, но это не привело меня к успеху. Я также скопировал свой xaml ListViewItem непосредственно в Listview (без таблицы данных). Это сработало, как и ожидалось.
ListView XAML:
<ListView ItemsSource="{Binding PropertyList}" HorizontalContentAlignment="Stretch" SelectionMode="Single">
<ListView.Resources>
<DataTemplate DataType="{x:Type properties:PasswordProperty}">
<ContentControl Content="{Binding}" Background="Red">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate" Value="{StaticResource PasswordPropertyListViewItem}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.EditMode, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type ListView}}}" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource EditPasswordPropertyListViewItem}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
Пример ListViewItem XAML, на который ссылается DataTemplate:
<ListViewItem x:Class="PasswordPropertyListViewItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008">
<Border BorderThickness="0,0,0,1" BorderBrush="DarkGray">
<DockPanel LastChildFill="True" HorizontalAlignment="Stretch">
<Label Margin="8" Content="{Binding PropertyName}"></Label>
Я ожидаю, что не имеет значения, где я нажимаю на ListViewItem, но элемент выбирается в любом случае (особенно красная часть изображения выше).