【问题标题】:Changing value of control in TabItem makes TabControl change index. How?更改 TabItem 中的控件值会使 TabControl 更改索引。如何?
【发布时间】:2015-11-25 12:47:42
【问题描述】:

我在 WPF 项目中有一个 TabControl,其中包含七个 TabItem。
在一个 TabItem (TabA) 中,我有一个绑定到项目列表的 ComboBox。所选项目绑定到我的代码隐藏中的一个属性。这很好用,我可以完美地更改属性。
在另一个 TabItem (TabB) 中,我可以用另一种方式更改相同的属性。因此,ComboBox 将反映新值。

问题在于,当 TabA 中的 ComboBox 由于属性从 TabB 更改而更改为 SelectedItem 时 - OnSelectionChanged 事件以某种方式冒泡到 TabControl,并且引发 TabControlSelectionChanged 事件 - 即使选项卡根本没有发生任何事情。

当我查看TabControlSelectionChanged 事件的参数时

var selectedTab = e.AddedItems[0] as TabItem;

selectedTab 为空。

为什么会发生这种情况,我该如何防止它发生?

【问题讨论】:

    标签: c# wpf combobox tabcontrol tabitem


    【解决方案1】:

    Evil Str已经回答了这个问题,但在他的带领下,我找到了另一种方法。
    在 ComboBox SelectionChanged 事件中,只需防止事件进一步冒泡即可。

    private void ComboBoxOnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // whatever code you want in here to handle the change of item
        e.Handled = true;
    }
    

    【讨论】:

      【解决方案2】:

      这是因为 TabControl.SelectionChanged 与 ComboBox.SelectionChanged 是同一事件。

      我已经遇到过一次这个问题。为了防止这种情况发生,我使用了以下代码:

      private void myTab_SelectionChanged(object sender, SelectionChangedEventArgs e)
              {
                  if (e.Source is TabControl) //if this event fired from TabControl
                  {
                      if (tabItemName.IsSelected)
                      {
                          //Do what you need here.
                      }
                  }
              }
      

      您可以根据需要调整此代码。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 2020-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多