为RadComboBox添加SelectionChanging事件

代码非标准,仅供参考。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Controls;
using Telerik.Windows.Controls;

namespace slTest
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            this.combo.SelectionChanging += combo_SelectionChanging;
        }

        void combo_SelectionChanging(object sender, SelectionChangingEventArgs e)
        {
            e.Cancel = this.isCancel.IsChecked.Value;
        }
    }

    public class Combo : Telerik.Windows.Controls.RadComboBox
    {
        public Combo()
        {
            base.SelectionChanged += Combo_SelectionChanged;
        }

        private object _orginalItem { get; set; }

        void Combo_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e)
        {
            if (e.AddedItems.Count != 0)
            {
                if (this._orginalItem == e.AddedItems[0]) return;
                if (SelectionChanging != null)
                {
                    var addedItems = new List<Object>();
                    if (e.AddedItems.Count != 0)
                        addedItems.AddRange(e.AddedItems.Cast<Object>());
                    var removedItems = new List<Object>();
                    if (e.RemovedItems.Count != 0)
                        removedItems.AddRange(e.RemovedItems.Cast<Object>());

                    var cancelEventArgs = new SelectionChangingEventArgs(addedItems, removedItems, true);
                    SelectionChanging(sender, cancelEventArgs);
                    if (cancelEventArgs.Cancel)//模拟cancel为true
                    {
                        var removedItem = e.RemovedItems.Count != 0 ? e.RemovedItems[0] : null;
                        this._orginalItem = removedItem;
                        this.SelectedItem = removedItem;
                    }
                }
            }
        }

        public event SelectionChangingEventHandler SelectionChanging;
    }

    public delegate void SelectionChangingEventHandler(object sender, SelectionChangingEventArgs e);
}
<UserControl x:Class="slTest.MainPage"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:local ="clr-namespace:slTest"
             xmlns:telerik="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Input"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel Width="300" HorizontalAlignment="Left" Margin="5">
            <local:Combo x:Name="combo">
                <telerik:RadComboBoxItem>1</telerik:RadComboBoxItem>
                <telerik:RadComboBoxItem>2</telerik:RadComboBoxItem>
                <telerik:RadComboBoxItem>3</telerik:RadComboBoxItem>
            </local:Combo>
            <TextBox x:Name="selectedValue"></TextBox>
            <CheckBox x:Name="isCancel"></CheckBox>
            <Button Click="Button_Click">Button</Button>
        </StackPanel>
    </Grid>
</UserControl>

转载于:https://www.cnblogs.com/grj1046/p/4916895.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值