- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一些看起来应该很简单但实际上已经证明非常困难的问题。
假设您有一个 TabControl 绑定(bind)到 ViewModel 的 itemsource 和使用 DataTemplate 显示的项目。现在假设 DataTemplate 由一个带有两列的 Grid 和一个用于调整列大小的 Grid 拆分器组成。
问题是,如果您调整一个选项卡上的列大小,然后切换到另一个选项卡,列的大小也会随之调整。这是因为 TabControl 在所有选项卡之间共享 DataTemplate。这种缺乏 UI 持久性适用于模板的所有元素,当调整各种 UI 组件时,这可能会导致令人沮丧的体验。另一个示例是 DataGrid 中的滚动位置(在选项卡上)。如果包含更多行的 DataGrid 滚动到另一个选项卡的底部,则包含少量项目的 DataGrid 将被滚动到 View 之外(只有一行可见)。最重要的是,如果 TabControl 在多个 DataTemplates 中定义了各种项目,则当您在不同类型的项目之间切换时, View 将被重置。我可以理解这种方法可以节省资源,但产生的功能似乎与预期的 UI 行为相矛盾。
所以我想知道是否有解决方案/解决方法,因为我确信这是其他人以前遇到过的。我在其他论坛上注意到了一些类似的问题,但没有真正的解决方案。一个关于使用 AdornerDecorator 但与 DataTemplate 一起使用时似乎不起作用的方法。我并不热衷于将所有 UI 属性(如列宽、滚动位置)绑定(bind)到我的 ViewModel,事实上,我在简单的 GridSplitter 示例中尝试了它,但我没有设法让它工作。 ColumnDefinitions 的宽度不一定受网格拆分器的影响。无论如何,如果有一个通用的解决方案,那就太好了。有什么想法吗?
如果我放弃 TabControl 并使用 ItemsControl 我会遇到类似的问题吗?是否可以修改 TabControl 样式,使其不在选项卡之间共享 ContentPresenter?
最佳答案
很长一段时间以来,我一直在搞乱这个。最后,我没有尝试修复/修改 TabControl,而是简单地重新创建了它的功能。它实际上工作得非常好。我从一个列表框(选项卡标题)和一个 ItemsControl 中制作了一个 Tab'like'Control。关键是将 ItemsControl 的 ItemsPanelTemplate 设置为 Grid。一点样式,和一个 DataTrigger 来管理项目的可见性,瞧。它运行完美,每个“选项卡”都是一个独特的对象,并保留了它的所有 UI 状态,如滚动位置、选择、列宽等。这种解决方案可能出现的任何缺点或问题?
<DockPanel>
<ListBox
DockPanel.Dock="Top"
ItemsSource="{Binding Tabs}"
SelectedItem="{Binding SelectedTab}"
ItemContainerStyle="{StaticResource ImitateTabControlStyle}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel
Orientation="Horizontal">
</StackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel
Margin="2,2,2,0"
Orientation="Horizontal" >
<TextBlock
Margin="4,0" FontWeight="Bold"
Padding="2"
VerticalAlignment="Center" HorizontalAlignment="Left"
Text="{Binding Name}" >
</TextBlock>
<Button
Margin="4,0"
Command="{Binding CloseCommand}">
<Image Source="/TERM;component/Images/Symbol-Delete.png" MaxHeight="20"/>
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ItemsControl
ItemsSource="{Binding Tabs}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl
Content="{Binding}">
<ContentControl.Style>
<Style>
<Style.Triggers>
<DataTrigger
Binding="{Binding IsSelected}" Value="False">
<Setter Property="ContentControl.Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DockPanel>
关于TabControl 中的 WPF UI 持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2082331/
情况我想使用 ui-date 在我的应用程序中设置/编辑日期。我使用最新稳定版本的 Angular、Angular-UI、JQuery-UI 等。 问题一旦使用日期选择器选择了日期,我的模型中的日期将
编辑: jQuery UI 可选择小部件内置了一个回调,stop,我需要知道如何以编程方式触发此事件。 (措辞不佳)我已将事件监听器附加到 jQuery UI Selectable Widget 。如
我正在尝试建立一个下一个JS与尾风用户界面提供的反应组件的网络应用程序。顺风用户界面是在幕后使用无头用户界面。。默认情况下,Next JS将构建服务器端组件,除非您在页面顶部添加“使用客户端”。不幸的
我正在尝试建立一个下一个JS与尾风用户界面提供的反应组件的网络应用程序。顺风用户界面是在幕后使用无头用户界面。。默认情况下,Next JS将构建服务器端组件,除非您在页面顶部添加“使用客户端”。不幸的
我正在尝试应用这个 SlickGrid 示例: http://mleibman.github.com/SlickGrid/examples/example4-model.html 到我自己的网络项目。
我想整理我的 Schemas为我的实体类生成,DTO 类位于 Springdoc ui . 我可以对 tags 进行排序和 operations通过以下配置 yml文件,但我的模式不是按排序顺序排列的
有谁知道阻止 ui-sref 重新加载状态的方法吗? 我无法通过“$stateChangeStart”事件执行此操作,因为 ui-sref 仅更改参数而不更改状态名称。 我的左边是书单,左边是书的详细
我正在 jquery ui 对话框中使用 jquery ui 自动完成小部件。当我输入搜索文本时,文本框缩进(ui-autocomplet-loading)但不显示任何建议。 var availabl
我正在尝试将 Kendo UI MVVM 框架与 Kendo UI 拖放机制结合使用;但我很难找到如何将数据从 draggable 对象中删除。 我的代码是这样的...... var viewMode
Kendo UI Web 和 Kendo UI Core 之间有什么区别 https://www.nuget.org/packages/KendoUIWeb http://www.nuget.org/
我正在尝试将 Kendo UI MVVM 框架与 Kendo UI 拖放机制结合使用;但是我很难找到如何从 draggable 对象中删除数据。 我的代码是这样的…… var viewModel =
使用 Angular JS - UI 路由器,我需要从我的父 View project.details 到我的 subview project.details.tasks 进行通信。我的 subvie
KendoUI 版本 2013.3.1119使用 Kendo MVVM 我有一个我构建的颜色选择器,它使用平面颜色选择器和使用调色板的颜色选择器。它们都可以正常运行,但平面颜色选择器的布局已关闭, s
我在非 UI 线程上,我需要创建并显示一个 SaveDialog。但是当我尝试显示它时:.ShowDialog() 我得到: "An unhandled exception of type 'Syst
我正在试验 jquery-ui 并查看和克隆一些示例。在一个示例(自动完成的组合框)中,我看到一个带有 ui-widget 类的 anchor (a) 元素,它与包含的 css 文件中的 .ui-wi
我需要返回一个 UI 列表,我用这个方法: getList(): Observable { return this.httpClient.get("/api/listui").pipe
我有 ui-grids在 angular-ui-tabs ,它们位于 ng-if 中以避免呈现问题。如果有更多数据并且网格进入滚动模式,则单击选项卡时数据会完全消失。我相信这是一个 ui-grids-
这似乎是一个通用的问题,与其他几个 React 开源框架相比,我真的很喜欢 Material ui 的可扩展性。 问题 “@material-ui/core”和“@material-ui/lab”中的
我有一个根页面(index.html),带有侧边栏(“菜单”)和主要内容 div(“主”),因此有两个 ui-view div - 一个称为“菜单”,一个称为“主”。 当主要内容区域有网站列表 (/s
有人在http://jsfiddle.net/hKYWr/上整理了一个很好的 fiddle 。关于使用 angular-ui 和 jqueryui sortable 来获得良好的可排序效果。 如何在两
我是一名优秀的程序员,十分优秀!