데이터 템플릿에 Grid
이있는 ListBox
이 있습니다. Grid
에는 Splitter
컨트롤이 있습니다. 이제 문제는 : 목록 상자의 항목 소스를 바인딩 할 때 여러 개의 격자가 내부적으로 생성되고 그 격자 때문에 내 분할 자 제어가 작동하지 않습니다. 그것은 예기치 않게 일하고있다. 즉, 스플리터 컨트롤을 왼쪽으로 움직이면 부드럽게 움직이지만 다른 행에서 이동하려고하면 뒤로 움직이지 않습니다. 이 문제에 대해 친절하게 도와주세요.ListBox 컨트롤에서 그리드 스플리터 모양 스크롤을 유지하는 방법
의 참조를 위해 샘플 코드를 참조하십시오 :
<Window x:Class="MultiColumnList.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MultiColumnList"
Title="Window1" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="400" d:DesignWidth="400" SizeToContent="WidthAndHeight">
<Grid >
<Grid.Resources>
<XmlDataProvider x:Key="BlogData" XPath="Blogs/Blog">
<x:XData>
<Blogs xmlns="">
<Blog>
<BlogSite>simplegeek.com</BlogSite>
<Blogger OnlineStatus="Offline">Chris Anderson</Blogger>
<Url>http://simplegeek.com</Url>
</Blog>
<Blog>
<BlogSite>fortes.com</BlogSite>
<Blogger OnlineStatus="Offline">Fil Fortes</Blogger>
<Url>http://fortes.com/work</Url>
</Blog>
<Blog>
<BlogSite>Longhorn Blogs</BlogSite>
<Blogger OnlineStatus="Online">Rob Relyea</Blogger>
<Url>http://www.longhornblogs.com/rrelyea/</Url>
</Blog>
<Blog>
<BlogSite>designerslove.net</BlogSite>
<Blogger OnlineStatus="Online">Nathan Dunlap</Blogger>
<Url>http://designerslove.net/</Url>
</Blog>
<Blog>
<BlogSite>blogs.msdn.com</BlogSite>
<Blogger OnlineStatus="Online">Karsten Januszewski</Blogger>
<Url>http://blogs.msdn.com/karstenj</Url>
</Blog>
<Blog>
<BlogSite>weblogs.asp.net</BlogSite>
<Blogger OnlineStatus="Online">Greg Schecter</Blogger>
<Url>http://weblogs.asp.net/greg_schechter</Url>
</Blog>
<Blog>
<BlogSite>blogs.msdn.com</BlogSite>
<Blogger OnlineStatus="Online">Tim Sneath</Blogger>
<Url>http://blogs.msdn.com/tims/</Url>
</Blog>
<Blog>
<BlogSite>weblogs.asp.net</BlogSite>
<Blogger OnlineStatus="Offline">Marcelo Lopez-Ruiz</Blogger>
<Url>http://weblogs.asp.net/marcelolr/</Url>
</Blog>
<Blog>
<BlogSite>blogs.msdn.com</BlogSite>
<Blogger OnlineStatus="Online">Kevin Moore</Blogger>
<Url>http://blogs.msdn.com/okoboji/default.aspx</Url>
</Blog>
<Blog>
<BlogSite>laurenlavoie.com</BlogSite>
<Blogger OnlineStatus="Offline">Lauren Lavoie</Blogger>
<Url>http://laurenlavoie.com/</Url>
</Blog>
</Blogs>
</x:XData>
</XmlDataProvider>
<DataTemplate x:Key="BlogDataTemplate">
<Grid TextBlock.FontSize="12" LayoutUpdated="Grid_LayoutUpdated">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="LeftColumn" Width="Auto" SharedSizeGroup="BloggerColumn"/>
<ColumnDefinition x:Name="Center" Width="*" SharedSizeGroup="BlogSiteColumn"/>
<ColumnDefinition x:Name="Right" Width="*" SharedSizeGroup="OnlineStatusColumn"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="10,0,10,0" Text="{Binding XPath=Blogger}"/>
<GridSplitter Grid.Column="1" Width="2" HorizontalAlignment="Center" Background="Black" DragCompleted="GridSplitter_DragCompleted"/>
<TextBlock Grid.Column="2" Margin="10,0,10,0" Text="{Binding XPath=Blogger/@OnlineStatus}"/>
</Grid>
</DataTemplate>
<ControlTemplate x:Key="Header" TargetType="{x:Type Button}">
<Border Background="LightGray"
TextBlock.Foreground="white"
TextBlock.FontSize="20"
Padding="10,3,10,4">
<ContentPresenter/>
</Border>
</ControlTemplate>
<Grid x:Key="ListHeader" Margin="5" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="BloggerColumn"/>
<ColumnDefinition Width="*" SharedSizeGroup="BlogSiteColumn"/>
<ColumnDefinition Width="*" SharedSizeGroup="BloggerOnlineStatusColumn"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Template="{StaticResource Header}">Blogger</Button>
<GridSplitter Grid.Column="1" Width="2" Background="Black" HorizontalAlignment="Stretch" DragCompleted="GridSplitter_DragCompleted" />
<Button Grid.Column="2" Template="{StaticResource Header}">Status</Button>
</Grid>
<Style x:Key="HeaderedScrollViewer" TargetType="{x:Type ScrollViewer}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DockPanel Margin="{TemplateBinding Padding}">
<ScrollViewer DockPanel.Dock="Top"
local:SetHorizontalOffset.Offset="{Binding
RelativeSource={RelativeSource TemplatedParent},
Path=HorizontalOffset}"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden"
Focusable="false"
Content="{StaticResource ListHeader}">
</ScrollViewer>
<ScrollContentPresenter Name="PART_ScrollContentPresenter"
KeyboardNavigation.DirectionalNavigation="Local"/>
</DockPanel>
<ScrollBar Name="PART_HorizontalScrollBar"
Orientation="Horizontal"
Grid.Row="1"
Maximum="{TemplateBinding ScrollableWidth}"
ViewportSize="{TemplateBinding ViewportWidth}"
Value="{TemplateBinding HorizontalOffset}"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
<ScrollBar Name="PART_VerticalScrollBar"
Grid.Column="1"
Maximum="{TemplateBinding ScrollableHeight}"
ViewportSize="{TemplateBinding ViewportHeight}"
Value="{TemplateBinding VerticalOffset}"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="{x:Type ListBox}" TargetType="{x:Type ListBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ScrollViewer Style="{StaticResource HeaderedScrollViewer}"
Grid.IsSharedSizeScope="True">
<StackPanel IsItemsHost="true"/>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<ListBox ItemsSource="{Binding Source={StaticResource BlogData}}"
ItemTemplate="{StaticResource BlogDataTemplate}" Height="400" Width="600"/>
</Grid>
의견을 보내 주셔서 감사합니다. 그러나 논리적 인 방법으로이 문제를 설명 할 수 있습니까? 그래서 나는이 문제가 미래에 발생하지 않도록 정확히해야할 일을 이해할 수 있습니다. –
문제는 그리드 스플리터 (원래 코드에서 설정된대로)가 이동되었을 때의 열을 확대한다는 것입니다. – Brannon