WPF一个接一个地改变了几个属性

时间:2017-03-20 16:24:51

标签: c# wpf

我有一个TabControl,每个标签包含一个TextBox。我需要以编程方式选择一个选项卡,然后设置TextBox的选择并将焦点设置为TextBox。

我的问题是,当我第一次在代码中选择一个新选项卡然后将焦点设置到文本框时,它不起作用。

当所需选项卡已经是选定的选项卡并且我将焦点设置到选项卡内的文本框时,它正在工作。

看起来,对WPF元素执行多个操作不起作用。

首先切换tabcontrol选项卡然后将焦点设置为新选择的TabItem中的子项的正确方法是什么?

编辑:我在互联网上找到了一些东西:等待渲染线程完成:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/693fbedb-efa6-413e-ab66-530c6961d3fb/how-to-wait-for-the-wpf-render-thread-to-catch-up?forum=wpf

Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => { })).Wait();

但这是正确的方法吗?

BTW:有什么区别:

Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => { })).Wait();
Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, new Action(() => { }));

1 个答案:

答案 0 :(得分:0)

使用function myFunction($next_date = null) { if(!$next_date) { $dateTime = new DateTime(); $next_date = $dateTime->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'); } echo "Next date : " . $next_date; } 方法。

焦点有一些细微差别,you can learn more here

<强> XAML

FocusManager.SetFocusedElement()

<强> CODE

<TabControl>
    <TabItem Header="One"
             x:Name="tabOne">
        <Button HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Content="Set Focus"
                Click="Button_Click" />
    </TabItem>
    <TabItem Header="Two"
             Name="tabTwo">

        <StackPanel>
            <TextBox Name="txtOne" />
            <TextBox Name="txtTwo" />
        </StackPanel>
    </TabItem>
    <TabItem Header="Three"
             x:Name="tabThree">
        <StackPanel>
            <TextBox Name="txtThree" />
            <TextBox Name="txtFour" />
        </StackPanel>
    </TabItem>
</TabControl>