Как создать WPF ListBoxItem с галочкой? - PullRequest
0 голосов
/ 24 мая 2019

Я некоторое время искал, как создать элемент списка с галочкой, если он выбран.

Проверяя различные ресурсы, кажется, что есть много решений для кода, но истинного XAML нет, только один.

Так вот что я пытался достичь:

Selection

Любые дополнения приветствуются.

В духе Ответ сам по себе (блог Stackoverflow)

1 Ответ

1 голос
/ 24 мая 2019

Так вот что я на самом деле получил после нескольких часов, чтобы понять это.Как уже говорилось, любые дополнения приветствуются.

Selection

Флажок:

U+2714 (10004)  ✔   HEAVY CHECK MARK    Dingbats (2700–27BF)

Код стиля:

  • , в основном создавая обертку для любого элемента, устанавливая базовые свойства и меняя их при выборе элемента, делая доступными StaticResource как checkmarkItem
<Window.Resources>
    <Style x:Key="checkmarkItem" TargetType="ListBoxItem">
        <Setter Property="SnapsToDevicePixels" Value="true"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border Name="Border" Background="Transparent" BorderThickness="5" BorderBrush="Transparent" Margin="0,1,0,1">
                        <Grid>
                            <TextBlock VerticalAlignment="Top" HorizontalAlignment="Right" Name="Marker" Visibility="Hidden" Background="#0078D7" Padding="5,0,0,5" Foreground="White">✔</TextBlock>
                            <ContentPresenter />
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ListBoxItem.IsSelected" Value="true">
                            <Setter TargetName="Marker" Property="Visibility" Value="Visible" />
                            <Setter TargetName="Border" Property="BorderBrush" Value="#0078D7"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

Реализация:

  • это обычное расположение стековых панелей, все стили добавляются путем ссылки в ItemContainerStyle="{StaticResource checkmarkItem}"
<Grid>
    <Label Grid.Row="0" FontSize="26">Software</Label>

    <ListView Grid.Row="1" SelectionMode="Multiple" BorderBrush="Transparent" ItemContainerStyle="{StaticResource checkmarkItem}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Height="64" AutomationProperties.Name="{Binding Title}">
                    <Image Source="{Binding Icon}" Height="48" Width="48" VerticalAlignment="Center" Margin="5,0,20,0"/>
                    <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                        <TextBlock Text="{Binding Title}" FontSize="16" TextWrapping="Wrap"/>
                        <TextBlock Text="{Binding Description}" TextWrapping="Wrap" />
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>

    </ListView>
</Grid>
...