WPF:ListBox的默认ItemContainerStyle

原创 2017年04月17日 11:21:29

 下面展示的是在.net  framework 4.5 中 ListBox的默认ItemContainerStyle, 样式模板中包含一些其它模板的默认属性值。

  样式被应用到ListBox控件渲染出的每一个ListBoxItem条目上。 每一个ListBoxItem 条目的结构是由一个Border包含一个ContentPresenter组成。最重要的是,默认样式也包含了当移动鼠标或者选中条目时如何使用触发器去渲染条目样式。

<Style x:Key="lbDefaultItemContainerStyle" TargetType="{x:Type ListBoxItem}">
    <Setter Property="SnapsToDevicePixels" Value="True"/>
    <Setter Property="Padding" Value="4,1"/>
    <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
    <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsMouseOver" Value="True"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.MouseOver.Background}"/>
                        <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.MouseOver.Border}"/>
                    </MultiTrigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="Selector.IsSelectionActive" Value="False"/>
                            <Condition Property="IsSelected" Value="True"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Background}"/>
                        <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Border}"/>
                    </MultiTrigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="Selector.IsSelectionActive" Value="True"/>
                            <Condition Property="IsSelected" Value="True"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Background}"/>
                        <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Border}"/>
                    </MultiTrigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
一些其它引用的资源样式:

<Style x:Key="FocusVisual">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate>
                <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<SolidColorBrush x:Key="Item.MouseOver.Background" Color="#1F26A0DA"/>
<SolidColorBrush x:Key="Item.MouseOver.Border" Color="#a826A0Da"/>
<SolidColorBrush x:Key="Item.SelectedInactive.Background" Color="#3DDADADA"/>
<SolidColorBrush x:Key="Item.SelectedInactive.Border" Color="#FFDADADA"/>
<SolidColorBrush x:Key="Item.SelectedActive.Background" Color="#3D26A0DA"/>
<SolidColorBrush x:Key="Item.SelectedActive.Border" Color="#FF26A0DA"/>

在ListBox中引入资源:

 <ListBox Margin="5"
         ItemContainerStyle="{DynamicResource lbDefaultItemContainerStyle}">
         <ListBoxItem>item1</ListBoxItem>
         <ListBoxItem>item2</ListBoxItem>
         <ListBoxItem>item3</ListBoxItem>
      </ListBox>


继续聊WPF——为ListView的行设置样式

关键点:要设置ListView的行样式,设置Listview的ItemContainerStyle属性,但在本例中,由于我把样式应用于所有的ListViewItem,故不用设置该属性。   ...
  • tcjiaan
  • tcjiaan
  • 2011年11月17日 22:09
  • 27898

WPF:ListBox 利用ItemContainerStyle改变ListBoxItem样式

上篇文章中的ItemContainerStyle 只是默认的样式,但是很多时候我们做鼠标悬浮操作时都想有其它的效果,比如改变ListBoxItem的背景或者边框,再者改变字体大小。     前面提到的...

wpf listbox notes 样式重写

  • 2017年12月14日 10:40
  • 180KB
  • 下载

WPF绚丽listbox

  • 2013年01月24日 17:06
  • 871KB
  • 下载

WPF一个列表(ListBox)呈现多个数据集合

关键字:CompositeCollection XAML:

WPF listbox width自适应

  • 2014年12月01日 09:40
  • 76KB
  • 下载

wpf 集合绑定 Comobox ListBox等

  • 2010年07月28日 15:23
  • 10KB
  • 下载

wpf listbox 滚动翻页功能

最近有个需求,需要通过 listbox滚动实现翻页功能。查了下资料 总结如下。 代码: 点击打开链接 方案一:利用ScrollViewer.ScrollChanged事件来实现当偏移量到底部时,进行相...

WPF中ListBox滚动时的缓动效果

上周工作中遇到的问题: 常规的ListBox在滚动时总是一格格的移动,感觉上很生硬。 所以想要实现类似Flash中的那种缓动的效果,使ListBox滚动时可以很流畅。 修改模板里的动画效...

WPF第三篇——listbox选择后显示隐藏菜单

举例说明该功能。 表单中有民族选项,分别为汉族和少数民族,当选择汉族时没有其他附加信息,当选择少数民族之后要弹出菜单继续选择是哪个少数民族 效果 实现代码 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WPF:ListBox的默认ItemContainerStyle
举报原因:
原因补充:

(最多只允许输入30个字)