トップ回答者
【WPF】DataGridの中にLineを表示したい(DataGridのスクロールバーに線を同期したい)

質問
-
visualStuido2019 Prismで作成しています。
DataGridの中にLineを表示したく、<Line>を配置したのですが、座標がWindow基準になってしまっているためDataGridのスクロールバーを動かすとDataGridの線を表示したかった場所とずれてしまいます。
DataGridのスクロールバーに線を同期するにはどのようにxamlを記述すればよいのでしょうか?
※DataGrid内に線を引ければ方法は何でも構いません。(Lineに拘ってはいません。)線は横方向に項目を跨いで引く線になります。
宜しくお願い致します。
- 編集済み Piggy0078 2022年5月27日 1:03
回答
すべての返信
-
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までお気軽にお問い合わせください。~
-
フォーラムオペレーターKumo様
連絡が遅くなり申し訳ございません。
教えて頂いた内容を検証しようとしているのですが、前段階で躓いてしまっています。
参考に載せて頂いたソースをそのままコピーして実行すると、DataGridに表示しきれていないのにも関わらずスクロールバーが表示されません。
(今まで自分で使用していたときは勝手に表示されていたのですが。。)
ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollBarVisibility="Visible"
を追記してもスクロールバーがグレー色で表示されるだけで操作が出来ません。
プロパティを見てもそれらしいところが見つからないのですが何が原因でしょうか?