SurfaceListBoxItem Trigger IsSelected - PullRequest
       5

SurfaceListBoxItem Trigger IsSelected

0 голосов
/ 05 сентября 2018

Добрый день!

У меня есть SurfaceListBox и шаблон элемента, разработанный с использованием XAML. Я добавил триггер IsSelected = true, который работает нормально, но я хочу отменить его выбор, если тот же элемент будет выбран снова. Я могу сделать это, если выбран другой элемент, но не могу отменить выбор этого элемента.

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="SelectTxt" Property="Visibility" Value="Collapsed" />
        <Setter TargetName="DeselectTxt" Property="Visibility" Value="Visible" />
        <Setter TargetName="SelectionBorder" Property="Background" Value="#3ab175" />
        <Setter TargetName="CheckMark" Property="Visibility" Value="Visible" />
        <Setter TargetName="CheckBorder" Property="BorderBrush" Value="White" />
    </Trigger>
</ControlTemplate.Triggers>

Я хочу вернуть все свойства сеттера при отмене выбора.

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете добавить CheckBox к вашему ItemTemplate, чтобы добиться выбора и отмены выбора. В этом свойстве CheckBox Checked привязано к IsSelected вашего ListViewItem. Итак, ваш существующий Triggers будет работать как есть.

<ListView.ItemTemplate>
    <DataTemplate>
        <CheckBox Content="{Binding}" 
                  Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"
                  IsChecked="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"/>
    </DataTemplate>
</ListView.ItemTemplate>

Если вы не хотите видеть CheckBox, вы можете использовать ToggleButton для получения той же функциональности. Как,

<ListView.ItemTemplate>
    <DataTemplate>
        <ToggleButton Content="{Binding}" 
                      Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"
                      IsChecked="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}">
            <ToggleButton.Template>
                <ControlTemplate TargetType="ToggleButton">
                    <Border BorderThickness="0">
                        <ContentPresenter/>
                    </Border>
                </ControlTemplate>
            </ToggleButton.Template>
        </ToggleButton>
    </DataTemplate>
</ListView.ItemTemplate>

Примечание. Используйте соответствующее имя свойства для привязки содержимого CheckBox & ToggleButton.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...