首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF选项卡到窗口

WPF选项卡到窗口
EN

Stack Overflow用户
提问于 2021-07-27 01:53:38
回答 1查看 44关注 0票数 0

我正在构建一个WPF (.Net 5)应用程序。我正在使用标签。有没有可能把一个标签“打开”到它自己的窗口里?我之所以这样问,是因为这将允许并排查看两个选项卡。

如果你们中有谁有更好的方法来并排查看标签,我很想听听。

代码..。

代码语言:javascript
复制
<TabControl Grid.Row="0" Grid.Column="1" Grid.RowSpan="2"
                ItemsSource="{ Binding DetailViewModels }" 
                SelectedItem="{Binding SelectedDetailViewModel, Mode=TwoWay}"
                TabStripPlacement="Top">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Title}" />
                    <TextBlock Text="*" Visibility="{Binding HasChanges, Converter={StaticResource BooleanToVisibilityConverter}}" />
                    <Button Command="{Binding CloseCommand}" Style="{StaticResource closeButtonStyle}"
                            VerticalContentAlignment="Top" Content="x" />
                </StackPanel>
            </DataTemplate>
        </TabControl.ItemTemplate>
    </TabControl>

我用一个命令来创建选项卡,该命令创建一个添加到DetailViewModels observable集合中的detailViewModel。详细信息视图只是一个用户控件。

EN

回答 1

Stack Overflow用户

发布于 2021-07-27 03:15:11

如果您想要将选项卡的内容带到新窗口中,反之亦然,那么您可以尝试创建一个包含所需内容的新UserControl,将该UserControl放入窗口和选项卡中,然后创建一个ViewModel作为两者的共享DataContext

不过,我不确定这是不是最好的方法。

更新

下面是我使用您提供的示例代码的意思:

在您的App.xaml中:

代码语言:javascript
复制
<Application ...
             xmlns:viewModels="clr-namespace:ViewModelsNamespace"
             ...>

    <Application.Resources>

        <DataTemplate DataType="{x:Type viewModels:DetailViewModel}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Title}" />
                <TextBlock Text="*" Visibility="{Binding HasChanges, Converter={StaticResource BooleanToVisibilityConverter}}" />

                <Button Command="{Binding CloseCommand}" Style="{StaticResource closeButtonStyle}"
                        VerticalContentAlignment="Top" Content="x" />
            </StackPanel>
        </DataTemplate>
        
    </Application.Resources>
    
</Application>

在主窗口中:

代码语言:javascript
复制
<Window ...>

    <TabControl Grid.Row="0" Grid.Column="1" Grid.RowSpan="2"
                ItemsSource="{ Binding DetailViewModels }" 
                SelectedItem="{Binding SelectedDetailViewModel, Mode=TwoWay}"
                TabStripPlacement="Top"/>
    
</Window>

在选项卡查看子窗口中:

代码语言:javascript
复制
<Window ...>

    <ContentControl Content="{Binding SelectedDetailViewModel}" />
</Window>

这样,您就可以在应用程序资源中为DetailViewModel定义一个DataTemplate,因此无论何时绑定它,都可以使用此DataTemplate查看它。

因此,您所需要做的就是将集合DetailViewModels绑定到主窗口中的TabControl.ItemsSource,并将SelectedDetailViewModel绑定到子窗口中的ContentControl,它们将看到相同的内容。

如果选项卡的内容变得更大,您可以将其放在UserControl中,并将其用于DataTemplate,正如我前面所建议的那样:

UserControl,说"MyUserControl.xaml":

代码语言:javascript
复制
<UserControl ...>

    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Title}" />
        <TextBlock Text="*" Visibility="{Binding HasChanges, Converter={StaticResource BooleanToVisibilityConverter}}" />

        <Button Command="{Binding CloseCommand}" Style="{StaticResource closeButtonStyle}"
                VerticalContentAlignment="Top" Content="x" />
    </StackPanel>
    
    ....
    ....

</UserControl>

在App.xaml中:

代码语言:javascript
复制
<Application ...
             xmlns:viewModels="clr-namespace:ViewModelsNamespace"
             ...>

    <Application.Resources>

        <DataTemplate DataType="{x:Type viewModels:DetailViewModel}">
            <local:MyUserControl/>
        </DataTemplate>
        
    </Application.Resources>
    
</Application>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68534461

复制
相关文章

相似问题

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