2017-07-17 340 views
-1

在我的項目中,我使用tabcontrol進行導航。 tabcontrol有三個tabitem,第二個tabitem是一個包含數據網格的用戶控件,第三個tabitem包含一個畫布。當我雙擊datagrid中的一行時,我希望UI跳轉到第三個tabitem並在畫布中繪製選定的行。我怎樣才能做到這一點?謝謝! 主窗口XAML如下:wpf從一個tabitem跳轉到另一個tabitem

<Window x:Class="PCClient.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:PCClient"   
    xmlns:viewModel="clr-namespace:PCClient.ViewModels"   
    xmlns:controls="clr-namespace:PCClient.Controls" 
    mc:Ignorable="d" 
    Loaded="Window_Loaded" 
    WindowState="Maximized" 
    Title="MainWindow" Height="480" Width="600"> 
<Window.DataContext> 
    <viewModel:MainViewModel></viewModel:MainViewModel> 
</Window.DataContext> 
<Grid> 
    <TabControl> 
     <TabItem Header="數據採集" Padding="5"> 
      <controls:ECGImportControl DataContext="{Binding Children[0]}"/> 
     </TabItem> 
     <TabItem Header="數據管理" Padding="5"> 
      <controls:ECGImportRecordsControl DataContext="{Binding Children[1]}"/> 
     </TabItem> 
     <TabItem Header="ECG全屏" Padding="5"> 
      <Grid> 
       <DockPanel LastChildFill="True"> 
        <ScrollBar Orientation="Vertical" DockPanel.Dock="Right"/> 
        <Canvas Background="AliceBlue"/> 
       </DockPanel> 
      </Grid> 
     </TabItem> 
    </TabControl> 
</Grid> 
</Window> 

和用戶控件如下:

<UserControl x:Class="PCClient.Controls.ECGImportRecordsControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:PCClient.Controls" 
     xmlns:convert="clr-namespace:PCClient.Converters" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<UserControl.Resources> 
    <Style TargetType="{x:Type DataGridColumnHeader}"> 
     <Setter Property="HorizontalContentAlignment" Value="Center" /> 
     <Setter Property="VerticalContentAlignment" Value="Center" /> 
    </Style> 
    <convert:ConvertIntToString x:Key="convertIntToString"></convert:ConvertIntToString> 
</UserControl.Resources> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="5*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBox Margin="5"/> 
     <Button Grid.Column="1" Content="查詢" Margin="5"/> 
    </Grid> 
    <DataGrid Grid.Row="1" Margin="5" ItemsSource="{Binding ImportRecords}" SelectedItem="{Binding SelectedImportRecord,Mode=TwoWay}" 
       CanUserSortColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" SelectionMode="Extended" 
       CanUserReorderColumns="False" RowHeaderWidth="0" CanUserAddRows="False" AutoGenerateColumns="False" EnableRowVirtualization="False" GridLinesVisibility="None"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="ID" Width="*"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <TextBlock Text="{Binding PatientID}" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="姓名" Width="3*"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <TextBlock Text="{Binding PatientName}" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="性別" Width="*"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <TextBlock Text="{Binding Sex,Converter={StaticResource convertIntToString}}" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="硬件ID" Width="2*"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <TextBlock Text="{Binding DeviceID}" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="硬件類型" Width="2*"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <TextBlock Text="{Binding DeviceType}" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="採集開始時間" Width="6*"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <TextBlock Text="{Binding StartTime,StringFormat=yyyy-MM-dd HH:mm:ss}" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="採集結束時間" Width="6*"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <TextBlock Text="{Binding EndTime,StringFormat=yyyy-MM-dd HH:mm:ss}" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="導入時間" Width="6*"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <TextBlock Text="{Binding UploadTime,StringFormat=yyyy-MM-dd HH:mm:ss}" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 
</UserControl> 

回答

0

如果你有TabItems恆定的號碼,您可以用IsSelected是這樣的:

<TabControl> 
     <TabItem IsSelected="{Binding IsFirstTabSelected,Mode=TwoWay}"> 
      <TextBlock>First Tab</TextBlock> 
     </TabItem> 
     <TabItem IsSelected="{Binding IsSecondTabSelected,Mode=TwoWay}"> 
      <TextBlock>Second Tab</TextBlock> 
     </TabItem> 
    </TabControl> 

你也可以使用TriggersVisualStateManager - 而不是將其綁定到ViewModel

只要確保 - 你得到正確的事件。或者覆蓋「阻塞」事件 - 將事件方法中的e.Handled設置爲false。也許你會用IsHitTestVisible=false上的FrameworkElements阻止你的事件。你的問題有點寬泛。

+0

謝謝你的回覆。問題是我不知道如何設置我的用戶控件內的tabcontrol狀態,因爲我無法得到我的用戶控件中的MainViewModel。我可以將一個屬性從Children [1]綁定到IsSelected of tabtiem 3嗎? –