2016-06-28 4 views
0

WPF에서 GridSplitter로 작업 한 것은 처음입니다. 사용자가 2 개의 주요 컨트롤이 포함 된 표 크기를 조정할 수 있도록 노력하고 있습니다. 상단에는 데이터 그리드가 있고, 아래에는 맵 이미지가있는 버튼이 있습니다. This 이것은 디자이너에서와 같이 보입니다. 나는 gridsplitter에 대해서만 별도의 행이 있습니다. 행 정의에 대한 xaml은Gridsplitter 원하지 않는 동작

<Grid.RowDefinitions> 
     <RowDefinition Height="37" /> 
     <RowDefinition Height="274*" /> 
     <RowDefinition Height="13*"/> 
     <RowDefinition Height="272*"/> 
     <RowDefinition Height="4*"/> 
</Grid.RowDefinitions> 

입니다. 흥미롭게도 GridSplitter는 이동하는 경우 작동합니다. 그런 다음 필요에 따라 이동하고 올바르게 작동 할 수 있습니다. 그러나 위의 행에 대한 행이 어디에 있는지 위의 스플리터를 이동하면 다시 아래로 이동할 수 없습니다. 나는 단지 그것을 계속 더 위로 움직일 수있다.

나는 here에 대해 이야기하는 동작을 보여주는 gif에 대한 링크를 첨부했습니다.

GridSplitter 기능을 위아래로 이동할 때 동일한 기능을 수행하는 방법에 대해 궁금합니다. 처음 시작 위치에서 아래로 이동 한 경우에만 기능이 정확합니다.

도움을 주시면 감사하겠습니다.

업데이트 : 여기

<UserControl x:Class="LWDCM.Views.JobsControl" 
     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:LWDCM.Views" 
     xmlns:Properties="clr-namespace:LWDCM.Properties" 
     xmlns:Utility="clr-namespace:LWDCM.Utility" 
     xmlns:Styles="clr-namespace:LWDCM.Styles" 
     xmlns:gif="https://github.com/XamlAnimatedGif/XamlAnimatedGif" 
     xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
     xmlns:Converters="clr-namespace:LWDCM.Converters" 
     mc:Ignorable="d" 
     Name="jobsControl" 
     MinWidth="800" 
     MinHeight="600" 
     > 


<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Styles/AppStyles.xaml" /> 
      <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! --> 
      <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> 
      <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> 
      <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" /> 
      <!-- Accent and AppTheme setting --> 
      <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" /> 
      <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

<Grid x:Name="MainGrid" 
     Margin="0,0,0,0" 
     Background="#26598c" 
     > 

    <!--<Grid.Background> 
     <LinearGradientBrush ColorInterpolationMode="SRgbLinearInterpolation" 
          StartPoint="0.5, 0.0" 
          EndPoint="0.5, 1.0"> 
      <GradientStopCollection> 
       <GradientStop Color="#FF111111" 
           Offset="0.0" /> 
       <GradientStop Color="#FF333333" 
           Offset="0.5" /> 
       <GradientStop Color="#FF111111" 
           Offset="1.0" /> 
      </GradientStopCollection> 
     </LinearGradientBrush> 
    </Grid.Background>--> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="37" /> 
     <RowDefinition Height="274*" /> 
     <RowDefinition Height="13*"/> 
     <RowDefinition Height="272*"/> 
     <RowDefinition Height="4*"/> 
    </Grid.RowDefinitions> 

    <Grid.Resources> 
     <ContextMenu x:Key="ListViewContextMenu"> 
      <MenuItem x:Name="ContextRename" 
         Header="{x:Static Properties:Resources.RenameJob}" 
         Command="{Binding RenameJobCommand}" /> 
      <MenuItem x:Name="ContextSetJobsiteAddress" 
         Header="{x:Static Properties:Resources.SetJobsiteAddress}" 
         Command="{Binding UpdateJobSiteAddressCommand}" /> 
      <MenuItem x:Name="ContextSetCustomerAddress" 
         Header="{x:Static Properties:Resources.SetCustomerAddress}" 
         Command="{Binding UpdateCustomerInformationCommand}" /> 
      <MenuItem x:Name="ContextSetContractorAddress" 
         Header="{x:Static Properties:Resources.SetContractorAddress}" 
         Command="{Binding UpdateContractorInformationCommand}" /> 
      <MenuItem x:Name="ContextEditWorkOrderNumber" 
         Header="{x:Static Properties:Resources.EditWorkOrderNumber}" 
         Command="{Binding EditWorkOrderNumberCommand}" /> 
      <Separator/> 
      <MenuItem x:Name="ExportToKML" 
         Header="{x:Static Properties:Resources.ExportToKML}" 
         Command="{Binding ExportToKMLCommand}"/> 
     </ContextMenu> 
     <Converters:NullVisibilityConverter x:Key="NullVisibilityConverter" /> 
    </Grid.Resources> 

    <DataGrid x:Name="JobListView" 
       AutoGenerateColumns="False" 
       ItemsSource="{Binding UnitStatusCollection, Mode=TwoWay}" 
       CanUserDeleteRows="False" 
       Style="{StaticResource JobGridViewStyle}" 
       SelectedItem="{Binding JobsListViewSelectedUnitInfo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
       Utility:DataGridColumnsBehavior.BindableColumns="{Binding DataGridColumns}" 
       ContextMenu="{StaticResource ListViewContextMenu}" 
       Margin="10,0,10,2" 
       Grid.Row="1" 
       SelectionMode="Single" 
       SelectionUnit="FullRow" 
       HorizontalAlignment="Stretch" 
       HorizontalContentAlignment="Stretch" 
       RowStyle="{StaticResource DataGridRowStyle}" 
       CellStyle="{StaticResource DataGridCellStyle}" 
       AlternationCount="2" 
       CanUserResizeRows="False" 
       HorizontalGridLinesBrush="#d6d6d6" 
       VerticalGridLinesBrush="#d6d6d6" 
       Background="#EAEAEA" 
       > 

     <!--This is to allow double clicks to open a job in LWD 3x--> 
     <DataGrid.InputBindings> 
      <MouseBinding Gesture="LeftDoubleClick" 
          Command="{Binding OpenInLWD3xCommand}" /> 
      <KeyBinding Key="Return" 
         Command="{Binding OpenInLWD3xCommand}" /> 
      <KeyBinding Key="F5" 
          Command="{Binding RefreshCommand}"/> 
     </DataGrid.InputBindings> 

     <DataGrid.Resources> 
      <Converters:DoubleNanVisibilityConverter x:Key="DoubleNanVisibilityConverter" /> 
      <Converters:NullVisibilityConverter x:Key="NullVisibilityConverter" /> 

     </DataGrid.Resources> 

    </DataGrid> 


    <Button Cursor="Hand" 
      Grid.ZIndex="0" 
      Margin="10,2,10,1" 
      Grid.Row="3" 
      x:Name="cmdMapImage" 
      Visibility="{Binding JobsListViewSelectedUnitInfo, Converter={StaticResource NullVisibilityConverter}}" 
      Style="{StaticResource MapButtonStyle}" 
      Command="{Binding ShowMapOnlineCommand}"> 
     <Image x:Name="mapImage" 
       Source="{Binding DisplayedImage}" 
       Tag="{Binding JobId}" 
       Stretch="Fill" 
       VerticalAlignment="Center" 
       RenderOptions.BitmapScalingMode="HighQuality"> 
     </Image> 
    </Button> 

    <Rectangle Fill="#26598c" 
       Grid.ZIndex="1" 
       Margin="0,10,7,0" 
       Grid.Row="3" 
       Height="46" 
       VerticalAlignment="Top" 
       HorizontalAlignment="Right" 
       Width="226" 
       RadiusY="3.667" 
       RadiusX="3.667" 
       Focusable="False"/> 

    <Button Grid.ZIndex="2" 
      Command="{Binding ScanForwardCommand}" 
      x:Name="scrollRightButton" 
      Margin="0,20,15,0" 
      HorizontalAlignment="Right" 
      Width="30" 
      Height="26" 
      VerticalAlignment="Top" 
      Grid.Row="3"> 

     <Image x:Name="scrollRight" 
       Source="/Assets/Down-30px-tall.png" 
       Stretch="Fill" 
       VerticalAlignment="Center" 
       RenderOptions.BitmapScalingMode="HighQuality"> 

     </Image> 
    </Button> 

    <Button Grid.ZIndex="2" 
      Command="{Binding ScanBackwardCommand}" 
      x:Name="scrollLeftButton" 
      Margin="0,20,50,0" 
      RenderTransformOrigin="1,-0.617" 
      HorizontalAlignment="Right" 
      Width="30" 
      Height="26" 
      VerticalAlignment="Top" 
      Grid.Row="3"> 

     <Image x:Name="scrollLeft" 
       Source="/Assets/Up-30px-tall.png" 
       Stretch="Fill" 
       VerticalAlignment="Center" 
       RenderOptions.BitmapScalingMode="HighQuality"> 

     </Image> 
    </Button> 

    <ComboBox x:Name="ScanSizesComboBox" 
       Grid.ZIndex="2" 
       ItemsSource="{Binding ScanSizes}" 
       SelectedItem="{Binding SelectedScanSize, Mode=TwoWay}" 
       ToolTip="{Binding (Validation.Errors)[0].ErrorContent}" 
       Margin="0,20,85,0" 
       HorizontalAlignment="Right" 
       Width="61" 
       Height="26" 
       VerticalAlignment="Top" 
       Grid.Row="3" /> 

    <Button x:Name="OpenLWD" 
      Grid.ZIndex="2" 
      Command="{Binding OpenInLWD3xCommand}" 
      Margin="0,20,150,0" 
      HorizontalAlignment="Right" 
      Width="75" 
      Height="26" 
      VerticalAlignment="Top" 
      Grid.Row="3" 
      Padding="0" 
      Background="#26598c"> 


     <Image x:Name="openIn3x" 
       Source="/Assets/LWD-button.png" 
       Tag="{Binding JobId}" 
       Stretch="Fill" 
       VerticalAlignment="Center" 
       RenderOptions.BitmapScalingMode="HighQuality" 
       Height="27"> 
     </Image> 

    </Button> 

    <DockPanel Grid.Row="0" 
       LastChildFill="False" 
       Grid.RowSpan="4"> 
     <Menu x:Name="menu" 
       DockPanel.Dock="Top" 
       IsTabStop="False" 
       FontSize="13" 
       VerticalAlignment="Top" 
       Background="WhiteSmoke" 
       Height="27"> 

      <MenuItem x:Name="FileMenu" 
         Header="{x:Static Properties:Resources.File}" 
         Background="Transparent" FontFamily="Arial"> 
       <MenuItem x:Name="BluetoothUpload" 
          Header="{x:Static Properties:Resources.UploadBluetoothJob}" 
          IsEnabled="True" 
          Command="{Binding OpenLWD3xBluetoothCommand}" /> 
       <MenuItem x:Name="FileUpload" 
          Header="{x:Static Properties:Resources.UploadLocalFile}" 
          IsEnabled="True" 
          Command="{Binding AddLocalJobCommand}" /> 
       <Separator /> 
       <MenuItem x:Name="FileLogout" 
          Header="{x:Static Properties:Resources.Logout}" 
          IsEnabled="True" 
          Command="{Binding LogoutCommand}" 
          CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" /> 
      </MenuItem> 

      <MenuItem x:Name="ViewMenu" 
         Header="{x:Static Properties:Resources.View}" 
         Background="Transparent"> 
       <MenuItem x:Name="ColumnOptions" 
          Header="{x:Static Properties:Resources.ColumnOptions}" 
          Background="Transparent" 
          Command="{Binding ShowColumnOptionsDialogCommand}" /> 

       <MenuItem x:Name="DisplayUnits" 
          Header="{x:Static Properties:Resources.DisplayUnits}" 
          Background="Transparent" 
          Command="{Binding ShowUnitsSelectionCommand}" /> 

       <Separator /> 
       <MenuItem x:Name="ViewRefresh" 
          IsEnabled="True" 
          Header="Re_fresh" 
          Command="{Binding RefreshCommand}" 
          /> 
       <!--<MenuItem x:Name="ViewOptions" Header="_Options" />--> 
      </MenuItem> 
      <MenuItem x:Name="HelpMenu" 
         Header="{x:Static Properties:Resources.Help}" 
         Background="Transparent"> 
       <MenuItem x:Name="HelpOpen" 
          Header="{x:Static Properties:Resources.OnlineHelp}" /> 
       <Separator /> 
       <MenuItem x:Name="HelpAbout" 
          Header="{x:Static Properties:Resources.About}" 
          Command="{Binding ShowAboutDialogCommand}" /> 

       <MenuItem x:Name="DeleteUnits" 
          Header="Delete all Units" 
          Command="{Binding RemoveUnitsCommand}"/> 
      </MenuItem> 
     </Menu> 
    </DockPanel> 

    <GridSplitter x:Name="gridSplitter" Grid.Row="2" Width="Auto" MinHeight="5" MaxHeight="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="0,4,0,4" /> 
</Grid> 


</UserControl> 

그리고 JobGridViewStyle된다 :

<Style x:Key="JobGridViewStyle" TargetType="DataGrid"> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="HorizontalContentAlignment" Value="Left" /> 
    <Setter Property="Background" Value="WhiteSmoke" /> 
    <Setter Property="SelectionMode" Value="Single" /> 
    <Setter Property="BorderThickness" Value="0" /> 
    <Setter Property="Margin" Value="10,0,10,0" /> 
</Style> 
+0

어떤 컨트롤이 스플리터 아래에 있으며 어떤 패널에 어떤 컨트롤을 저장하고 있습니까? 이 견해 전체를 볼 수 있을까요? – Karolis

+0

컨트롤이 포함 된 표의 xaml로 게시물을 업데이트했습니다. – KSF

+0

이 표는 UserControl 또는 Window에 저장되어 있습니까? 붙여 넣은 코드를 시도했기 때문에 제대로 작동합니다. – Karolis

답변

0

내가 도움을 주셔서 감사합니다 여기에 그리드를 유지하는 사용자 컨트롤의 전체 XAML입니다. 왜 그런지 잘 모르겠지만 내 대답에 대한 해결책은 내 GridSplitter에

ShowsPreview="True" 

을 추가하는 것이 었습니다. 왜 이것이 기능에 영향을 미칠지 모르겠지만 문제가 해결되었습니다.

참고로이 페이지를 보았습니다 : How to: Resize Rows with a GridSplitter 해결책을 찾았을 때.

감사합니다.