ListBox选用不同的模板

先上一个效果图。大家可以看到,中间的ListBox的选中状态的Item和未选中的Item的模板是不同。


下面就介绍一下它的做法。

第一步:创建两个DataTemplate待用。一个是选中状态的(SelectDataTemplate),一个未选中状态的(NormalDataTemplate)。将它放们放到资源里面。
        <phone:PhoneApplicationPage.Resources>
                <DataTemplate x:Key="SelectDataTemplate">
                         <Border BorderThickness="2" BorderBrush="White">
            <StackPanel Orientation="Horizontal">                    
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionName}" FontSize="30"></TextBlock>
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionAmount}" FontSize="30" Margin="10,0,0,0"></TextBlock>
                <Button>Update</Button>
                <Button>Del</Button>
                                 
            </StackPanel>
                        </Border>
        </DataTemplate>

        <DataTemplate x:Key="NormalDataTemplate">
            <StackPanel Orientation="Horizontal">
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionName}" FontSize="30"></TextBlock>
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionAmount}" FontSize="30" Margin="10,0,0,0"></TextBlock>                
            </StackPanel>
        </DataTemplate>
</phone:PhoneApplicationPage.Resources>

第二步:用Blend添加一个ListBox到页面里面。在ListBox上面右键->add ListBoxItem。
第三步:在刚才添加的ListBoxItem上面右键->Edit Template->Edit a Copy。命名为:MyListBoxItemStyle
第四步:编辑我们刚才添加的MyListBoxItemStyle。在左下边的Objects and Timeline中选中ContentContainer。然后在右边的Properties里面点击ContentTemplate项的右边绿色小方块。在弹出窗口中选择Local Resource->NormalDataTemplate


第五步:打开xaml。在刚才添加的MyListBoxItemStyle中找到视觉状态组SelectionStates。在它的下面有一个Selected状态。在这个状态下面有一段代码:

<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer">
  <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>

这是一段动画。代码的意思是将ListBox的选中项(ContentContainer)的前景色(Foreground)换成红色(Value="{StaticResource PhoneAccentBrush}")。

同样的原理,在这段动画再加一段动画,把选中项的模板换掉。

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="ContentTemplate" Storyboard.TargetName="ContentContainer">
  <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource SelectDataTemplate}"></DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>

第六步:绑定数据。
  public class Consumption
    {
        //消费名称
        public string ConsumptionName { get; set; }

        //消费金额
        public float ConsumptionAmount { get; set; }
    }

***********************************************************
List<Consumption> consumptionList = new List<Consumption> { 
                new Consumption{ConsumptionName="早餐", ConsumptionAmount=2},
                new Consumption{ConsumptionName="午餐", ConsumptionAmount=12},
                new Consumption{ConsumptionName="晚餐", ConsumptionAmount=8},
                new Consumption{ConsumptionName="水果", ConsumptionAmount=6},
                new Consumption{ConsumptionName="杂志", ConsumptionAmount=6}            
            };

            focusListBox.ItemsSource = consumptionList;


******************************************************************

这是源代码,希望你喜欢:http://download.csdn.net/detail/nnnnyyyy/4738198


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值