none
如何设置模版控件中某个控件的焦点 RRS feed

  • 问题

  • 比如,我一个模版控件包含了三个TextBox。

    当我这个模版控件获取焦点时,到底是哪个TexTBox有焦点。我不需要动态设置,我只想知道,默认的如何设置。

    2011年12月29日 7:07

答案

  • 你好,

    假如你的XAML是像下面的

                            <StackPanel>
                                <TextBox x:Name="Txt1"></TextBox>
                                <TextBox x:Name="Txt2"></TextBox>
                                <TextBox x:Name="Txt3"></TextBox>
                            </StackPanel>

    那当你的控件获取焦点的时候,Txt1首先获得焦点,也就是首先在XMAL中出现的TextBox首先获得焦点。

    如果你想设置某个TextBox 首先获得焦点,你可以通过重写OnApplyTemplate 方法 OnGotFocus 方法 来实现。

    比如你想设置第二个TextBox首先获得焦点:

            TextBox DefaultFocusTxt;

            protected override void OnGotFocus(RoutedEventArgs e)
            {
                base.OnGotFocus(e);
                DefaultFocusTxt.Focus();

            }

            public override void OnApplyTemplate()
            {
                base.OnApplyTemplate();

                DefaultFocusTxt = GetTemplateChild("Txt") as TextBox;
            }


    Daoping Liu - MSFT
    2012年1月3日 6:48
    版主

全部回复

  • 由上到下.


    GetZ 不抛弃,不放弃.
    • 已建议为答案 zongTest 2011年12月30日 15:25
    • 取消建议作为答案 学习.net 2011年12月31日 3:19
    2011年12月29日 10:21
  • 请问什么叫由上到下? zindex?
    2011年12月31日 3:19
  • 你好,

    假如你的XAML是像下面的

                            <StackPanel>
                                <TextBox x:Name="Txt1"></TextBox>
                                <TextBox x:Name="Txt2"></TextBox>
                                <TextBox x:Name="Txt3"></TextBox>
                            </StackPanel>

    那当你的控件获取焦点的时候,Txt1首先获得焦点,也就是首先在XMAL中出现的TextBox首先获得焦点。

    如果你想设置某个TextBox 首先获得焦点,你可以通过重写OnApplyTemplate 方法 OnGotFocus 方法 来实现。

    比如你想设置第二个TextBox首先获得焦点:

            TextBox DefaultFocusTxt;

            protected override void OnGotFocus(RoutedEventArgs e)
            {
                base.OnGotFocus(e);
                DefaultFocusTxt.Focus();

            }

            public override void OnApplyTemplate()
            {
                base.OnApplyTemplate();

                DefaultFocusTxt = GetTemplateChild("Txt") as TextBox;
            }


    Daoping Liu - MSFT
    2012年1月3日 6:48
    版主