none
【WPF】DataGridの中にLineを表示したい(DataGridのスクロールバーに線を同期したい) RRS feed

  • 質問

  • visualStuido2019 Prismで作成しています。

    DataGridの中にLineを表示したく、<Line>を配置したのですが、座標がWindow基準になってしまっているためDataGridのスクロールバーを動かすとDataGridの線を表示したかった場所とずれてしまいます。

    DataGridのスクロールバーに線を同期するにはどのようにxamlを記述すればよいのでしょうか?

    ※DataGrid内に線を引ければ方法は何でも構いません。(Lineに拘ってはいません。)

     線は横方向に項目を跨いで引く線になります。

    宜しくお願い致します。

    • 編集済み Piggy0078 2022年5月27日 1:03
    2022年5月27日 1:02

回答

  • エラーが出て書き込めないので、gist


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク Piggy0078 2022年6月8日 1:32
    2022年5月27日 11:14

すべての返信

  • エラーが出て書き込めないので、gist


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク Piggy0078 2022年6月8日 1:32
    2022年5月27日 11:14
  • Piggy0078さん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    ご質問いただいた件ですが、その後いかがでしょうか。
    gekkaさんから寄せられた投稿はお試しになりましたか。

    そのほか、以下のXamlでも試してみてください。

    <Grid> 
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition Height="40"/>
            </Grid.RowDefinitions>
            <DataGrid 
                      ItemsSource="{Binding List}"  ScrollViewer.ScrollChanged="DataGrid_ScrollChanged"
                      HeadersVisibility="All" RowHeaderWidth="30" CanUserResizeColumns="True" >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Column1" IsReadOnly="true" Binding="{Binding Mode=OneWay}" />
                    <DataGridTextColumn Header="Column2" IsReadOnly="true" Binding="{Binding Mode=OneWay}" />
                    <DataGridTextColumn Header="Column3" IsReadOnly="true" Binding="{Binding Mode=OneWay}" Width="200"/>
                    <DataGridTextColumn Header="Column4" IsReadOnly="true" Binding="{Binding Mode=OneWay}" />
                    <DataGridTextColumn Header="Column5" IsReadOnly="true" Binding="{Binding Mode=OneWay}" />
                </DataGrid.Columns>
            </DataGrid>
            <Line X1="0" X2="780" Margin="20,0,18,0" Y1="{Binding ScrollValue}" Y2="{Binding ScrollValue}" StrokeThickness="2" Stroke="Gray"  />
        </Grid>
    
    In Codebehind:
    
    using System.Collections.ObjectModel; 
    using System.ComponentModel;
    using System.IO;
    using System.Runtime.CompilerServices;
    using System.Windows;
    
    namespace CustomCursor
    {
      public partial class MainWindow : Window, INotifyPropertyChanged
      {
        
        public MainWindow()
        {
          InitializeComponent();
    
          DataContext = this;
        }
        public ObservableCollection<string> List { get;set;}=new ObservableCollection<string>(){ "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
     
        private double _scrollValue=80.0;
        public double ScrollValue
        {
          get
          {
            return _scrollValue;
          }
          set
          {
            _scrollValue = value;
            OnPropertyChanged("ScrollValue");
          }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged([CallerMemberName] string name = null)
        {
          PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }
        private void DataGrid_ScrollChanged(object sender, System.Windows.Controls.ScrollChangedEventArgs e)
        {
            ScrollValue = _scrollValue + e.VerticalChange*10;
        }
      }
    }

    結果:



    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2022年5月31日 9:21
    モデレータ
  • フォーラムオペレーターKumo様

    連絡が遅くなり申し訳ございません。
    教えて頂いた内容を検証しようとしているのですが、前段階で躓いてしまっています。

    参考に載せて頂いたソースをそのままコピーして実行すると、DataGridに表示しきれていないのにも関わらずスクロールバーが表示されません。
    (今まで自分で使用していたときは勝手に表示されていたのですが。。)
          ScrollViewer.HorizontalScrollBarVisibility="Visible"
                ScrollViewer.VerticalScrollBarVisibility="Visible"
    を追記してもスクロールバーがグレー色で表示されるだけで操作が出来ません。
    プロパティを見てもそれらしいところが見つからないのですが何が原因でしょうか?
    2022年6月3日 2:04
  • gekka様

    時間がかかってしまいましたがようやく理解し実装できました。

    ありがとうございました。


    2022年6月8日 1:31