установите несколько флажков внутри списка, нажав на строку в wpf - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь выбрать несколько флажков внутри списка, нажав строку. он работает нормально, когда щелчок выполняет над содержимым флажка.
Xaml:

 <ListBox ItemsSource="{Binding Templates}">
    <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox Content="{Binding Name}" 
                          Margin="0 2 0 0"
                          Style="{StaticResource BaseCheckBox}" 
                          IsChecked="{Binding IsSelected}"
                          HorizontalAlignment="Stretch"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
  </ListBox>

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Решение этой проблемы:

  <ListBox ItemsSource="{Binding Templates}" Style="{StaticResource ListBoxStyle}">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                <Setter Property="Focusable" Value="False"/>
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
0 голосов
/ 11 января 2019

Если ваши элементы списка содержат только флажки, вы можете заставить эти CheckBox es занимать всю ширину элемента:

<CheckBox 
    Width="{Binding ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType=ListBoxItem}}"/>

Если ваши элементы списка также содержат некоторые другие элементы, все становится сложнее.

Вы можете, например, свяжите свойство IsSelected каждого ListBoxItem со свойством элемента данных IsSelected:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
    </Style>
</ListBox.ItemContainerStyle>

Затем вы сможете установить флажки, выбрав элементы в списке. Однако отмеченные элементы также будут в выбранном состоянии.

Если вам это не нравится или не нужно, вы можете удалить визуальный стиль выделения:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        <Setter Property="IsSelected" Value="{Binding IsSelected}"/>

        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
        </Style.Resources>
    </Style>
</ListBox.ItemContainerStyle>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...