我正在构建一个WPF (.Net 5)应用程序。我正在使用标签。有没有可能把一个标签“打开”到它自己的窗口里?我之所以这样问,是因为这将允许并排查看两个选项卡。
如果你们中有谁有更好的方法来并排查看标签,我很想听听。
代码..。
<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。详细信息视图只是一个用户控件。
发布于 2021-07-27 03:15:11
如果您想要将选项卡的内容带到新窗口中,反之亦然,那么您可以尝试创建一个包含所需内容的新UserControl,将该UserControl放入窗口和选项卡中,然后创建一个ViewModel作为两者的共享DataContext。
不过,我不确定这是不是最好的方法。
更新
下面是我使用您提供的示例代码的意思:
在您的App.xaml中:
<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>在主窗口中:
<Window ...>
<TabControl Grid.Row="0" Grid.Column="1" Grid.RowSpan="2"
ItemsSource="{ Binding DetailViewModels }"
SelectedItem="{Binding SelectedDetailViewModel, Mode=TwoWay}"
TabStripPlacement="Top"/>
</Window>在选项卡查看子窗口中:
<Window ...>
<ContentControl Content="{Binding SelectedDetailViewModel}" />
</Window>这样,您就可以在应用程序资源中为DetailViewModel定义一个DataTemplate,因此无论何时绑定它,都可以使用此DataTemplate查看它。
因此,您所需要做的就是将集合DetailViewModels绑定到主窗口中的TabControl.ItemsSource,并将SelectedDetailViewModel绑定到子窗口中的ContentControl,它们将看到相同的内容。
如果选项卡的内容变得更大,您可以将其放在UserControl中,并将其用于DataTemplate,正如我前面所建议的那样:
UserControl,说"MyUserControl.xaml":
<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中:
<Application ...
xmlns:viewModels="clr-namespace:ViewModelsNamespace"
...>
<Application.Resources>
<DataTemplate DataType="{x:Type viewModels:DetailViewModel}">
<local:MyUserControl/>
</DataTemplate>
</Application.Resources>
</Application>https://stackoverflow.com/questions/68534461
复制相似问题