我是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);
这只是我的代码部分。
这很好用。问题是默认选择。当应用程序启动时,它会触发默认选择并获取事件中的更改。但我只需捕获用户更改的事件。用于检查或检测仅由用户执行的更改的任何选项
答案 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);