Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selecting a partially displayed WPF checkbox

I am having a design problem and I know there has to be a way to make it work. I tried the solutions here: Annoying auto scroll of partially displayed items in WPF ListView But they didnt work for me because I am not allowed to work in the code-behind. I have a list of items from a wpf ListBox. like this:

Listbox picture

when I try to select the CheckBox in line 5, the Window centers on it but does not check it. After further testing, I found that it will not select the CheckBox as long as the bottom border of the item is not in view.

Here is the xaml for the ListBox and its Style:

<ListBox Grid.Column="0" Grid.Row="1" Name="RequestCheckoutV"
         ItemsSource="{Binding Path=CheckoutVM, Mode=TwoWay, IsAsync=True}"
         SelectedItem="{Binding Path=SelectedPermit}"
         BorderThickness="0"
         KeyboardNavigation.TabNavigation="Continue">
  <ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
      <Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
      <Setter Property="Background" Value="Transparent" />
      <Setter Property="Control.HorizontalContentAlignment" Value="Center"/>
      <Setter Property="Control.VerticalContentAlignment" Value="Top"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type ListBoxItem}"  >
            <ContentPresenter />
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </ListBox.ItemContainerStyle>
</ListBox>

What can I do to make this select the checkbox instead of just centering it? Any help is appreciated.

like image 321
tCoe Avatar asked Aug 23 '16 21:08

tCoe


2 Answers

So by adding the specification of "Press" to ClickMode property to CheckBox via ClickMode="Press" you're telling that object to basically ignore the event otherwise hijacked by the list item template. Now it will accept the first event in it's hit area for itself instead of the list item since it's default is "Release". Cheers :)

like image 106
Chris W. Avatar answered Nov 06 '22 01:11

Chris W.


Try adding to your .ItemContainerStyle:

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Style.Triggers>
            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                <Setter Property="IsSelected" Value="True"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</ListView.ItemContainerStyle>

This will effectively give focus to anything you click in there.

like image 3
Aaron Thomas Avatar answered Nov 06 '22 01:11

Aaron Thomas