我有一个wpf选项卡控件,其中我想有两列。一列将始终显示一个图形控件,该控件将用于显示数据,具体取决于所选的选项卡-但它始终是相同的图形控件。
不幸的是,由于图形控件的设计,不可能有一个以上的图形控件,这主要是因为性能不佳。我已经尝试过,但无法正常工作。
另一栏将显示特定于所选标签的项目,例如组合框,单选按钮等-下面是一个示例
我在右侧列中也具有选项卡控件,但是各个选项卡的布局在右侧列中比较拥挤,因此用户体验不太理想。
现在,我将选项卡控件托管在一个网格中,该网格具有两列且列跨度设置为两。对于右侧窗格,我具有各种组框,并且可以使用相应选项卡项的IsSelected属性使用触发器控制这些组框的可见性。但是,这导致了其他问题,我可以追溯到有问题的控件的可见性。
我想做的是修改控件的模板,以便可以将所有当前控件托管在选项卡控件中,以便图形控件始终显示在左侧,而右侧选项卡的内容由所选标签控制。
我认为执行此操作将涉及控件模板或选项卡控件的另一个模板,但是,到目前为止,我找不到类似的东西。有没有办法做这样的事情,如果有的话,有没有做这件事的指南或一些提示,我应该怎么做?
谢谢。
答案 0 :(得分:2)
我达到此要求的方式如下。而且我会将模板/样式应用于按钮,以使它们看起来像TabHeader。
<Grid Name="MainGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal">
<StackPanel.Resources>
<ControlTemplate x:Key="ButtonTemplate">
<!--Template style-->
</ControlTemplate>
</StackPanel.Resources>
<Button>Root bending</Button>
<Button>S-N curve bending</Button>
<Button>S-N curve contact</Button>
</StackPanel>
<Grid Grid.Row="1" Grid.Column="0">
<!--Your graph control goes here-->
</Grid>
<Grid Grid.Row="1" Grid.Column="1">
<!--Show/hide these based on buttons-->
<!--Control 1 with combo boxes, radio buttons, etc.-->
<!--Control 2 with combo boxes, radio buttons, etc.-->
<!--Control 3 with combo boxes, radio buttons, etc.-->
</Grid>
</Grid>
答案 1 :(得分:0)
您可以将ChartControl声明为资源,并在每个Tab中使用它。
要确认ChartControl相同,请在TextBox中键入内容,然后选择另一个Tab。文字保持不变。 TextBlock中显示的初始化时间保持不变。
<Window x:Class="XamlApp.Window6"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="TabsWindow"
Height="480" Width="640">
<Window.Resources>
<Grid x:Key="IamChartControl" Background="Khaki">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Source={x:Static system:DateTime.Now}}" Margin="5"/>
<TextBox Text="hello" Grid.Row="1" Margin="5"/>
</Grid>
</Window.Resources>
<Grid>
<TabControl ItemsSource="{Binding Source='12345'}">
<TabControl.ContentTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ContentControl Content="{StaticResource IamChartControl}"/>
<TextBlock Grid.Column="1" Text="{Binding}"/>
</Grid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
</Window>
答案 2 :(得分:-1)
感谢您的建议。由于存在大量现有代码,并且由于图形控件不完全符合WPF MVVM,因此在这种情况下,更好的答案是Ritesh发布的答案。将图表放入资源中将需要比我现在有更多时间重写代码。
但是,我发现了自己遇到的问题-有些控件在我认为应该显示的时候没有显示粗体文本。这完全是我的错。
在每个字段的每个选项卡上,我都有多个不同的标签,这些标签根据用户选择的结果集而可见。自从我访问这段代码以来已经有很长时间了,我正在做的是添加粗体字体,因为这会使值更好地显示出来。
令人尴尬的是,我忘记了我是这样实现的。
我将对每个字段使用单个标签,而不是使用多个不同的标签方法,并在多数据触发器中设置适当的内容绑定,因为这样可以使操作更简洁。这是一个非常复杂的应用程序。
我打算删除它,但是其他人也提出了类似的问题,但是,我认为Ritesh的答案与其他情况不同。