wpf 如何在 ListView SelectedItem 中制作样式。?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/8150928/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 23:10:29  来源:igfitidea点击:

How to make style in ListView SelectedItem.?

wpflistviewstyles

提问by Jitendra Jadav

I am working on a WPF application and I want to make style on ListViewItem. I have made a style for this but this does not give me the exact result what I want. Apart from this I want CornerRadiusin this style so how I can add this?

我正在开发一个 WPF 应用程序,我想在ListViewItem. 我为此做了一个风格,但这并没有给我我想要的确切结果。除此之外,我想要CornerRadius这种风格,那么我该如何添加呢?

            <ListView x:Name="MenuBarList" 
                    Grid.Row="1"
                    Height="{Binding MainMenuHeight}"  
                    Width="{Binding MainMenuWidth}" 
                    ItemsSource="{Binding Path=Menu.Options}" 
                    SelectedItem="{Binding Path=SelectedMainMenuOption, Mode=TwoWay}"
                    Foreground="White"
                    Background="Transparent" 
                    VerticalContentAlignment="Center"
                    HorizontalContentAlignment="Center"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    IsSynchronizedWithCurrentItem="True"
                    IsTabStop="False">

                <ListView.Style>
                    <Style TargetType="{x:Type ListView}">
                        <Setter Property="BorderBrush" Value="White"/>
                        <Setter Property="BorderThickness" Value="0"/>
                        <Setter Property="Margin" Value="0"/> 
                        <Setter Property="Width" Value="300"/>
                        <Style.Resources>
                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#9449b0"/>
                            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#9449b0"/>
                    </Style.Resources>
                    </Style>
                </ListView.Style>


                <ListView.ItemTemplate>
                    <DataTemplate>

                        <StackPanel Orientation="Horizontal" Focusable="False" VerticalAlignment="Center" HorizontalAlignment="Center">
                            <Image Source="{Binding IconPath}" 
                                   Focusable="False"
                                   HorizontalAlignment="Center"
                                   VerticalAlignment="Center"
                                   IsHitTestVisible="False"/>

                            <TextBlock Text="{Binding Title}" 
                                       Focusable="False" 
                                       HorizontalAlignment="Center" 
                                       VerticalAlignment="Center" 
                                       FontFamily="Segoe UI"
                                       FontSize="26"
                                       IsHitTestVisible="False"/>
                        </StackPanel>
                </DataTemplate>

                </ListView.ItemTemplate>
            </ListView>

回答by Pavel Korsukov

Quick solution is to override item template. You may reffer to WPF or Silverlight themes about contols styling. See the BureauBlue.xamlfor ListViewItem complete template.

快速解决方案是覆盖项目模板。您可以参考有关控制样式的 WPF 或 Silverlight 主题。有关ListViewItem 完整模板,请参阅BureauBlue.xaml

<ListView x:Name="uiList">
    <ListView.Resources>
        <ControlTemplate x:Key="SelectedTemplate" TargetType="ListViewItem">
            <Border SnapsToDevicePixels="true" 
                    BorderBrush="{TemplateBinding BorderBrush}" 
                    BorderThickness="{TemplateBinding BorderThickness}" 
                    Background="{TemplateBinding Background}"
                    CornerRadius="5" x:Name="border">
                <ContentControl 
                    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                    Margin="2,2,2,2" 
                    VerticalAlignment="Stretch"
                    Content="{TemplateBinding Content}" />
            </Border>
        </ControlTemplate>
        <Style TargetType="ListViewItem">
            <Style.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="IsSelected" Value="true" />
                        <Condition Property="Selector.IsSelectionActive" Value="true" />
                    </MultiTrigger.Conditions>
                    <Setter Property="Background" Value="Pink" />
                    <Setter Property="Template" Value="{StaticResource SelectedTemplate}" />
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    </ListView.Resources>
    <ListViewItem Content="10" />
    <ListViewItem Content="11" />
</ListView>