首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将焦点设置为新TabItem中的按钮

将焦点设置为新TabItem中的按钮
EN

Stack Overflow用户
提问于 2010-12-29 10:49:30
回答 3查看 1.3K关注 0票数 0

我使用一个TabControl来显示一个项目列表。ItemView是我编写的一个单独的控件。

代码语言:javascript
复制
       <TabControl SelectedItem="{Binding CurrentItem}"
                    IsSynchronizedWithCurrentItem="True"
                    ItemsSource="{Binding ItemList}">
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <ctrls:ItemView/>
                </DataTemplate>
            </TabControl.ContentTemplate>
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding ShortItemDescription}"/>
                </DataTemplate>
            </TabControl.ItemTemplate>
        </TabControl>

如果用户按下按钮,就会将新的ViewModel添加到ViewModels列表中,TabControl将其显示为一个新的选项卡。添加新选项卡后,将选择新选项卡。

代码语言:javascript
复制
       <Button Command="{Binding AddItemCommand}"
               Content="Add item"/>

在新视图的内部是一个按钮,每次添加新的选项卡时都需要集中注意力。我尝试在FocusManager中使用ItemView和初始化的事件,但是这只是第一次添加一个新的选项卡。

代码语言:javascript
复制
<UserControl x:Class="ItemView"
         ...
         Initialized="ViewInitialized">
<Grid>
    ...

    <!-- Set focus to this button -->
    <Button Content="Search"
            Command="{Binding SearchCommand}"
            Name="SearchButton"
            Grid.Column="0"
            Grid.Row="0"/>
</Grid>
</UserControl>

有什么想法吗?

更新

ItemView中Initialize方法的内容当前是这个-它运行良好.第一次,然后再也没有

代码语言:javascript
复制
    public delegate void ChangeFocusDelegate();

    private void FocusSearchButton()
    {
        SearchButton.Focus();
    }

    private void ViewInitialized(object sender, EventArgs e)
    {
        ChangeFocusDelegate focusDelegate = FocusSearchButton;
        Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, focusDelegate);
    }
EN

回答 3

Stack Overflow用户

发布于 2010-12-29 12:28:52

这应该是这样的工作(针对您定义的UserControl初始化事件):

代码语言:javascript
复制
private void ViewInitialized(object sender, System.EventArgs e)
{
    this.SearchButton.Focus();
}
票数 1
EN

Stack Overflow用户

发布于 2010-12-29 13:01:17

您需要在视图和事件处理程序方法中订阅已加载的事件,在按钮上调用Focus()。

票数 0
EN

Stack Overflow用户

发布于 2010-12-30 13:12:07

好像有点奇怪..。

IsVisibleChanged ...无反应

初始化..。无反应

上膛..。无反应

然后我找到了解决办法。如果运行时对每个选项卡使用相同的视图,并且只将内部数据更改为另一个ViewModel,怎么办?因此,解决办法是:

代码语言:javascript
复制
    private void SameViewButDataContextChanged(object sender, System.Windows.DependencyPropertyChangedEventArgs e)
    {
        ChangeFocusDelegate focusDelegate = FocusFileSearchButton;
        Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, focusDelegate);
    }

每次我添加一个选项卡,焦点就会切换到搜索按钮。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4553412

复制
相关文章

相似问题

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