我正在使用棱镜和MEF,并且我想动态地将选项卡项添加到选项卡控件W/O违反 Prism - MVVM - MEF规则。 有人可以通过简单的步骤告诉我/示例如何做到这一点如何以编程方式将选项卡项添加到棱镜中的选项卡控件
回答
TabControl可以像一些其他控件一样绑定到集合。以下是我在聊天消息程序中使用的tabcontrol的一个示例。
<TabControl ItemsSource="{Binding Path=Rooms, Mode=OneWay}" SelectedItem="{Binding Path=SelectedRoom, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=RoomName}" x:Name="Header" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
//in here is where you put controls for what you want the tabs to look like.
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
因此,在这个例子中,我有一个名为“房间”的自定义数据类型“聊天室”,这有一个像ROOMNAME它的属性的集合。每当用户创建一个新房间时,它将被添加到Rooms集合中,并创建一个新的tabitem。所以在我的视图模型:
private ObservableCollection<ChatRoom> _Rooms;
public MainWindowViewModel()
{
this._Rooms = new ObservableCollection<ChatRoom>();
}
public ObservableCollection<ChatRoom> Rooms
{
get { return this._Rooms; }
}
首先,我不是说我的做法是最好的一切可能的办法......但我只是想,因为我认为这很酷:)
你分享可以有TabControl 区域 ...所以你可以简单地导航到该地区的一些看法:) ...会发生什么?当您使用某个视图导航到TabControl区域时...该视图将作为新的TabItem添加。
当然有一些事情你必须先做。
您需要修改TabControl样式。您只需告诉TabControl它可以找到Tab项目的标题。当然,您可以将它添加到应用程序的资源。
所以你需要TabItemStyle ......在这里你指定是头文本......这样的事情...
<Style x:Key="MyTabItemStyle" TargetType="{x:Type TabItem}"> <Setter Property="Header" Value="{Binding Content.DataContext.TabHeaderText, RelativeSource={RelativeSource Self}}"/> ...
而且在默认TabControlStyle使用它现在
<Style TargetType="{x:Type TabControl}"> <Setter Property="ItemContainerStyle" Value="{StaticResource MyTabItemStyle}"/> ...
你可以在任何你想要的地方定义TabControl区域。请注意,它应该使用我们之前定义的Style。
<TabControl Regions:RegionManager.RegionName="MyRegion" ... />
现在好了,你可以浏览到你的观点,即区域......当然,你将不得不设置视图一些视图模型与字符串属性TabHeaderText的DataContext的...
现在它应该工作:)当然,我们正在谈论导航,所以你应该提供ViewModels [RegionMemberLifetime(KeepAlive = true)]
属性:)我希望它可以帮助某人某一天。
您需要一个TabControl的区域适配器。我在此对色带控制,所以你可以从它启发:
public class RibbonRegionAdapter : RegionAdapterBase<Ribbon>
{
public RibbonRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
: base(regionBehaviorFactory)
{
}
protected override void Adapt(IRegion region, Ribbon regionTarget)
{
region.Views.CollectionChanged += (s, e) =>
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
foreach (RibbonTabItem RibbonTab in e.NewItems)
{
regionTarget.Tabs.Add(RibbonTab);
}
}
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
{
foreach (RibbonTabItem RibbonTab in e.OldItems)
{
regionTarget.Tabs.Remove(RibbonTab);
}
}
};
}
protected override IRegion CreateRegion()
{
return new AllActiveRegion();
}
}
在XAML:<Fluent:Ribbon prism:RegionManager.RegionName="{x:Static inf:RegionNames.RibbonRegion}"/>
添加你需要这样的标签:
IRegion RibbonRegion = _regionManager.Regions[RegionNames.RibbonRegion];
RibbonRegion.Add(YourTabItemView);
RegionNames仅仅是一类我infrastructe project:
public class RegionNames
{
public static string RibbonRegion = "RibbonRegion";
}
希望能帮到
- 1. 以编程方式添加选项卡,c#选项卡控件
- 2. C#WinForms,将选项卡添加到选项卡控件,然后以编程方式将控件添加到每个选项卡
- 3. 如何以编程方式向AJAX选项卡添加新选项卡?
- 4. 如何将选项卡项目添加到现有的选项卡控件wpf
- 5. 如何将WPF表单添加到选项卡控件的选项卡中
- 6. 检测何时将选项卡项目添加到WPF选项卡控件
- 7. 以编程方式将选项卡添加到粉丝页面
- 8. 如何将选项卡添加到Xcode上的选项卡式应用程序
- 9. 动态添加选项卡到选项卡控件
- 10. 将选项卡添加到WPF C#中的现有选项卡控件#
- 11. C#如何以编程方式在控件之间选项卡
- 12. jquery-ui选项卡 - 添加选项卡
- 13. 如何将选项卡添加到选项卡栏控制器? (iOS)
- 14. 所有选项卡添加标题选项卡控件
- 15. 以编程方式创建选项卡
- 16. 在Jquery中以编程方式更改选项卡和选项卡的内容
- 17. Simulink:以编程方式添加控件到simulink掩码选项卡
- 18. 如何将选项卡添加到TabView
- 19. 使用jQuery将选项卡功能添加到选项卡
- 20. 如何清除旧选项卡并在选项卡上添加新选项卡
- 21. 如何以编程方式设置选定的选项卡SlidingTabLayout
- 22. 如何以编程方式更改选定的选项卡?
- 23. 如何以编程方式选择Angular UI上的选项卡?
- 24. Opencart如何将产品选项添加到选项卡
- 25. 使用Facebook AP以编程方式添加fanpage选项卡
- 26. 使用PrimeFaces以编程方式添加选项卡
- 27. 以编程方式向ViewController添加选项卡栏
- 28. 你如何以编程方式转到不同的选项卡?
- 29. HTML选项卡式控件
- 30. 如何将选项卡中的表单控制到选项卡面板中的其他选项卡?