检测用户更改的选项卡控件选择

时间:2017-07-11 10:10:48

标签: c# wpf

我是WPF的新手。我有一个项目有一个选项卡控件包含2个选项卡。要默认选择,第一个标签项的属性为“ IsSelected = True ”。

这工作正常。但我需要捕获用户更改的事件,这意味着如果用户更改了选择,我需要捕获具有值的更改。为此,我通过实现' FrameworkElementHandlerEventArgs '创建了一个事件参数

我现有的代码如下;

public class SelectionChanagedEventArgs : FrameworkElementHandlerEventArgs
    {
        public object SelectedItem { get; set; }
    }

我正在注册此事件以捕获更改

RegisterEvent<SelectionChangedEventArgs>(
                (sender, e) =>
                {
                    if (e == null)
                    {
                        return;
                    }
                    //Here i got the selection changes
                },
handler,handler);

这只是我的代码部分。

这很好用。问题是默认选择。当应用程序启动时,它会触发默认选择并获取事件中的更改。但我只需捕获用户更改的事件。用于检查或检测仅由用户执行的更改的任何选项

3 个答案:

答案 0 :(得分:1)

您可以在挂钩事件处理程序之前,在代码中以编程方式设置第一个IsSelected属性。

或者您可以使用一个变量来跟踪调用事件处理程序的次数,然后只是第一次立即返回:

TabItem

或者检查视图是否已加载:

int count;
RegisterEvent<SelectionChangedEventArgs>(
(sender, e) =>
{
    if (e == null || count++ == 0)
    {
        return;
    }
    //Here i got the selection changes
}, handler, handler);

没有特定的&#34;用户更改事件&#34;。无论用户是否实际进行了有效选择,都会触发完全相同的事件。

答案 1 :(得分:0)

您可能会尝试检查是否有先前的选择:

This program was compiled against version 2.6.1 of the Protocol Buffer

其中 tab.SelectionChanged += (sender, e) => { if (e.RemovedItems.Count == 0) return; //Here i got the selection changes }; 是您的tab。您不需要使用事件参数创建自定义类。

答案 2 :(得分:0)

我添加了IsLoaded属性来验证是否加载了控件以进行演示。现在工作正常。如果您认为由此产生的任何其他问题影响,请分享。

以下是我的更新代码:

RegisterEvent<SelectionChangedEventArgs>(
                (sender, e) =>
                {
                    if (e == null || !(sender as System.Windows.Controls.Control).IsLoaded)
                    {
                        return;
                    }
                    //Here i got the selection changes
                },
handler,handler);