首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道WPF用户控件的选择和显示?

如何知道WPF用户控件的选择和显示?
EN

Stack Overflow用户
提问于 2016-09-13 12:26:48
回答 3查看 1.8K关注 0票数 0

我在选项卡控件下显示了与多个实例相同的用户控件。

代码语言:javascript
复制
<TabControl x:Name="tabControl"  HorizontalAlignment="Left" Height="616" Margin="0,20,0,20" VerticalAlignment="Top" Width="1282" Grid.ColumnSpan="2">
                <TabItem Header=" OPHistorianCutter " Padding="0">
                        <OP:Historian x:Name="OPHistorianCutter1" />
                </TabItem>
                <TabItem Header=" OPHistorianCutter " Padding="0">
                        <OP:Historian x:Name="OPHistorianCutter2" />
                </TabItem>

                <TabItem Header=" OPHistorianCutter " Padding="0">
                        <OP:Historian x:Name="OPHistorianCutter3" />
                </TabItem>

            </TabControl>

我的问题是:

  1. 在“OPHistorian”用户控件中是否有我可以使用的事件?当用户控件被标签显示时,它会执行?我试过“GotFocus”,但似乎不起作用。
  2. 是否有任何属性告诉我当前正在显示用户控件(在选项卡控件下选择)。我试了一下‘OPOrganorian1.isFocuse’,但似乎总是错误的。
EN

回答 3

Stack Overflow用户

发布于 2016-09-13 12:30:38

1.您可以使用tabControl的tabControl事件来知道显示的是哪个tabItem。

代码语言:javascript
复制
   SelectionChanged="TabControl_OnSelectionChanged"

   private void TabControl_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
   {
       throw new NotImplementedException();
   }

2.您可以使用SelectedIndex获取所选选项卡:

代码语言:javascript
复制
tabControl.SelectedIndex

或者用tabItem

代码语言:javascript
复制
tabItem.IsSelected

通过从父控件获取属性,可以在UserControl上报告这些属性:

代码语言:javascript
复制
    public bool IsSelected
    {
        get
        {
            var tabitem = Parent as TabItem;
            return tabitem != null && tabitem.IsSelected;
        }
    }

编辑

您可以使用isVisible属性和关联的事件:

代码语言:javascript
复制
 <TabControl>
        <TabItem Header="1">
        </TabItem>
        <TabItem Header="2">
            <local:UserControl1 IsVisibleChanged="UIElement_OnIsVisibleChanged"></local:UserControl1>
        </TabItem>
        <TabItem></TabItem>
    </TabControl>


   private void UIElement_OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
   {
       var uc = sender as UserControl1;
   }
票数 1
EN

Stack Overflow用户

发布于 2016-09-13 12:51:08

1.您可以使用tabControl的tabControl事件来知道显示了哪个tabItem (和UserControl)。

  1. 您可以使用UserControl的加载事件来知道它何时被激活。看看这个。
票数 1
EN

Stack Overflow用户

发布于 2016-09-13 13:13:08

谢谢你的回复,但我找到了解决办法。必须使用可视化树助手来查找父容器,并查看它是否在可视范围内。

代码语言:javascript
复制
public bool IsUserVisible
        {
            get
            {
                UIElement element = (UIElement)this;
                if (!element.IsVisible)
                    return false;
                var container = VisualTreeHelper.GetParent(element) as FrameworkElement;
                if (container == null) throw new ArgumentNullException("container");

                Rect bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.RenderSize.Width, element.RenderSize.Height));
                Rect rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
                return rect.IntersectsWith(bounds);
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39470088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档