簡體   English   中英

WPF DataGrid 水平滾動條在列調整大小的右側

[英]WPF DataGrid horizontal scrollbar snpas right on column resize

我對調整列大小的默認行為有疑問:

如果 DataGrid 對於其容器來說太寬,則會出現水平滾動條。 如果我向右拖動欄並調整最右側列的大小,則滾動條會向右移動。

就我而言,我不想要這種行為。 滾動條要么不貼在右邊,要么像 MS Excel 一樣調整大小預覽。

有人可以告訴我如何實現這一目標嗎?

Edit1:這種行為很好(不堅持正確): 常規滾動條行為

我不喜歡的是這個: 向右粘住/按扣

如果我能很容易地意識到這一點,我寧願: Excel 行為

/編輯1

我將 .Net 4.8 用於一個簡單的 WPF 應用程序。

如果需要一個例子,下面將顯示兩個網格,左邊的一個可用於該行為:

<Window x:Class="DataGridTest.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:DataGridTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">

    <Window.DataContext>
        <local:MasterViewModel/>
    </Window.DataContext>

    <DockPanel>
        <Button DockPanel.Dock="Bottom" Command="{Binding DisplaySelectionCountCommand}">Display Selection Count</Button>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>

            
            <DataGrid Grid.Column="0" ItemsSource="{Binding Items}" AutoGenerateColumns="False"
                 SelectionMode="Extended" local:MultiSelect.IsEnabled="True" HorizontalScrollBarVisibility="Auto">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="100"/>
                    <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="100"/>
                    <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="100"/>
                </DataGrid.Columns>
            </DataGrid>
            <DataGrid Grid.Column="1" ItemsSource="{Binding Items}"
                  SelectionMode="Extended" local:MultiSelect.IsEnabled="True"/>
        </Grid>
    </DockPanel>
</Window>

當我建議收聽SizeChanged事件時,我並不是說DataGrid是源。

既然你對列感興趣,你當然必須聽單元格事件:

主窗口.xaml

<DataGrid>
  <DataGrid.CellStyle>
    <Style TargetType="DataGridCell">
      <EventSetter Event="SizeChanged" Handler="DataGridCell_SizeChanged" />
    </Style>
  </DataGrid.CellStyle>
</DataGrid>

主窗口.xaml.cs

private void DataGridCell_SizeChanged(object sender, SizeChangedEventArgs e)
  => (sender as DataGridCell).BringIntoView();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM