WPF-自定义实现步骤条控件

摘要:
步骤栏实现效果:在列表框的基础上实现步骤栏控件。

步骤条实现的效果:

WPF-自定义实现步骤条控件第1张

步骤条控件是在listbox的基础上实现的。

一、

xaml代码:

  <Window.Resources>
        <convert1:StepListBarWidthConverter x:Key="StepListStepWidthConverter" />
        <ControlTemplate x:Key="NormalItemTemplate" TargetType="ListBoxItem">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition Height="20" />
                </Grid.RowDefinitions>
                <ContentPresenter HorizontalAlignment="Center" Content="{TemplateBinding Content}" />
                <Grid Grid.Row="1" Margin="2">
                    <Ellipse
                        Width="10"Height="10"HorizontalAlignment="Center"VerticalAlignment="Center"Fill="#55DCF5" />
                </Grid>
            </Grid>
        </ControlTemplate>
        <Style x:Key="StepListBoxStyle" TargetType="ListBox">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBox">
                        <Grid>
                            <Rectangle
                                Width="510"Height="4"Margin="0,0,0,8"HorizontalAlignment="Center"VerticalAlignment="Bottom"Fill="#55DCF5" />
                            <ItemsPresenter />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <ControlTemplate x:Key="SelectedTemplate" TargetType="ListBoxItem">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition Height="20" />
                </Grid.RowDefinitions>
                <ContentPresenter HorizontalAlignment="Center" Content="{TemplateBinding Content}" />
                <Grid Grid.Row="1" Margin="2">
                    <Ellipse
                        Width="8"Height="8"VerticalAlignment="Center"Panel.ZIndex="3">
                        <Ellipse.Fill>
                            <SolidColorBrush Color="#FFFFFF" />
                        </Ellipse.Fill>
                    </Ellipse>
                    <Ellipse
                        Width="12"Height="12"VerticalAlignment="Center"Panel.ZIndex="2">
                        <Ellipse.Fill>
                            <SolidColorBrush Color="#225BA7" />
                        </Ellipse.Fill>
                    </Ellipse>
                    <Ellipse
                        Width="16"Height="16"VerticalAlignment="Center"Panel.ZIndex="1">
                        <Ellipse.Fill>
                            <SolidColorBrush Color="#FFFFFF" />
                        </Ellipse.Fill>
                    </Ellipse>
                </Grid>
            </Grid>
        </ControlTemplate>
        <Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem">
            <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource AncestorType=ListBox}, Converter={StaticResource StepListStepWidthConverter}}" />
            <Setter Property="FontSize" Value="16" />
            <Setter Property="FontFamily" Value="SimHei" />
            <Setter Property="Foreground" Value="#ACF1FE" />
            <Setter Property="Template" Value="{StaticResource NormalItemTemplate}" />
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Trigger.Setters>
                        <Setter Property="Template" Value="{StaticResource SelectedTemplate}" />
                        <Setter Property="FontSize" Value="20" />
                        <Setter Property="Foreground" Value="White" />
                        <Setter Property="FontFamily" Value="SimHei" />
                    </Trigger.Setters>
                </Trigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>
    <StackPanel Background="SteelBlue">
        <ListBox
            Margin="0 200 0 0"x:Name="NavList"HorizontalAlignment="Center"BorderThickness="0"Foreground="#225BA7"IsEnabled="False"ItemContainerStyle="{StaticResource ListBoxItemStyle}"SelectedIndex="4"Style="{StaticResource StepListBoxStyle}">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel IsItemsHost="False" Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBoxItem>1</ListBoxItem>
            <ListBoxItem>2</ListBoxItem>
            <ListBoxItem>3</ListBoxItem>
            <ListBoxItem>4</ListBoxItem>
            <ListBoxItem>5</ListBoxItem>
            <ListBoxItem>6</ListBoxItem>

        </ListBox>
        <StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
            <Button Click="Button_Click">下一步</Button>
            <Button Margin="100,0,0,0" Click="Button_Click_1">首页</Button>
        </StackPanel>
    </StackPanel>

各个样式模板介绍:StepListBoxStyle,整个步骤条控件的样式,矩形长条模板。

NormalItemTemplate,未被选中时单个步骤样式。

SelectedTemplate,被选中时单个步骤样式。

ListBoxItemStyle,通过样式和触发器使用模板。

二、需要固定步骤条总长度,根据项数设置步骤条步长,所以需要写个转换器,设置每项长度。

转换器代码:

    classStepListBarWidthConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, objectparameter, CultureInfo culture)
        {
            ListBox listBox = value asListBox;
            if (listBox==null)
            {
                returnBinding.DoNothing;
            }
            if (listBox.Items.Count == 0)
            {
                return 0;
            }
            return 510 / (listBox.Items.Count - 1);
        }

        public object ConvertBack(object value, Type targetType, objectparameter, CultureInfo culture)
        {
            returnBinding.DoNothing;
        }
    }

使用的时候对Listbox的ItemSource和SelectedIndex进行绑定即可。

免责声明:文章转载自《WPF-自定义实现步骤条控件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇springboot项目中集成ip2region遇到的问题及终极解决办法Android内核移植下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF外包公司—北京动点飞扬软件:WPF技术分享—Prism V2之旅(1)

概述     如果你在开发wpf程序,应该听说过The Composite Application Guidance for WPF(以下简称prism)     总而言之,prism是帮助你开发复杂的wpf应用程序的。希望在看完此系列教程以后能对你有所帮助.     从去年正式版发布至今,将近快半年了.silverlight 2正版的推出.prism也开...

WPF附加属性

1、定义:一个属性原来不属于某个对象,但由于某种需求而被后来附加上去。附加属性的本质是依赖属性。 2、作用:将属性与数据类型解耦,让数据类型的设计的更加灵活。 3、举例:Human,School。Human中的一个人,他如果在学校里,就会有成绩等;如果在公司里,他就有部门等。此时的成绩和部门就是附加属性。 4、使用: 4.1) 使用DependencyPr...

关于微软Silverlight,你应该知道的10件事

对于任何成长中的企业来说,设计一个合适的网站是一件非常重要的事情,但是如何让你的网站具有富互联网应用程序(Rich Internet Applications,RIA)的体验却不是那么简单。为了在这方面为开发者减轻负担,微软最近推出了Silverlight——这是一个针对Web开发者而推出的跨平台、跨浏览器的插件。这个目前以“候选版”形式提供的插件可以支持...

[转]WPF焦点概述

WPF 中,有两个与焦点有关的主要概念:键盘焦点和逻辑焦点。 键盘焦点指接收键盘输入的元素,而逻辑焦点指焦点范围中具有焦点的元素。 本概述将详细介绍这些概念。 理解这些概念之间的区别对于创建具有可以获取焦点的多个区域的复杂应用程序是非常重要的。 参与焦点管理的主要类有 Keyboard 类、FocusManager 类以及基元素类(如 UIElement...

WPF:菜单

原文:http://blog.csdn.net/sheila_1988/article/details/7280195 1、Menu Menu 是水平放置它的项的,默认情况下把灰色栏作为背景。 把Menu 添加到它的ItemsControl 基类的唯一公开的API 是IsMainMenu 属性。当为true(默认的)时,用户按下Alt 或者F10 键,...

WPF知识点全攻略10- 路由事件

路由事件是WPF不得不提,不得不会系列又一  先来看一下他的定义: 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件。 实现定义:路由事件是一个 CLR 事件,可以由 RoutedEvent 类的实例提供支持并由 Windows Presentation Foundation (WPF) 事件系统来处理...