WPF ListView
을 항상 볼 수있는 바닥 글로 확장해야합니다. 바닥 글은 머리글처럼 동작해야하며 멀리 스크롤하지 않아야합니다. 다음 XAML 외부 ScrollViewer
리스트 뷰의에서 ScrollViewer를 조종 뒤에 코드에 연결 사용ListView의 기본 크기에 어떻게 바인딩합니까?
<Window x:Class="LayoutTests.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="125" Width="176">
<Grid>
<StackPanel>
<ListView Name="L" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
<ListViewItem Content="Brown brownie with a preference for white wheat."/>
<ListViewItem Content="Red Redish with a taste for oliv olives."/>
</ListView>
<ScrollViewer CanContentScroll="False" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" ScrollChanged="ScrollViewer_ScrollChanged">
<!-- Would like to bind Rectangle.Width to the preferred width of L -->
<Rectangle Height="20" Width="500" Fill="Red"/>
</ScrollViewer>
</StackPanel>
</Grid>
</Window>
이 뒤에있는 코드에서는 다음과 같습니다
private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
var bottomScrollViewer = sender as ScrollViewer;
var listScrollViewer = GetScrollViewer(L) as ScrollViewer;
if (listScrollViewer != null && bottomScrollViewer != null)
listScrollViewer.ScrollToHorizontalOffset(bottomScrollViewer.HorizontalOffset);
}
GetScrollViewer()
는 다음과 같이 정의 (되지만,) 중요 :
public static DependencyObject GetScrollViewer(DependencyObject depObj)
{
if (depObj is ScrollViewer)
{ return depObj; }
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var result = GetScrollViewer(child);
if (result == null) { continue; }
else { return result; }
}
return null;
}
ScrollViewer
ListView
의 분명히 AB를 알고 그 아이의 적절한 폭을 지정합니다. 문제는 그 너비에 바인딩하는 방법을 찾을 수 없다는 것입니다. 따라서 여기에 있습니다 :
Rectangle.Width
을 ListView
의 기본 크기로 어떻게 바인딩합니까?
또는 ListView
에 항상 표시되는 바닥 글을 포함시키는 방법은 무엇입니까?
바인딩 설정이 매우 흥미 롭습니다. {}에 코드를 지정하여 내용을 엉망으로 만들 수 있다는 것을 알지 못했습니다. 거기에 이름이 있나요? 현재 그것은 나를 위해 작동하지 않습니다 - 스크롤바가 나타나지 않습니다. 지금 디버깅 중입니다. – Pascal
이상한 - 너비는 얼마입니까? ([Snoop 유틸리티] (http://snoopwpf.codeplex.com/)를 사용하여 찾을 수 있습니다. – Vlad
글쎄, 더미 변환기를 지정하고 (자신의'Convert' 메소드에 중단 점을 설정하여) 바인딩을 디버깅 할 수 있습니다. – Vlad