Wpf 包装在面板MVVM中的用户控件
我是WPF/Xaml新手,搜索了我面临的这个问题,但发现它很难解决。在这方面请求一些帮助 我需要在panel/listview中显示水平绑定的usercontrols数据,以便它们在满足listview/panel的宽度时自动换行,并使用垂直滚动条自动显示,如图所示。 到目前为止,我有这个代码Wpf 包装在面板MVVM中的用户控件,wpf,mvvm,wpf-controls,wpfdatagrid,wrappanel,Wpf,Mvvm,Wpf Controls,Wpfdatagrid,Wrappanel,我是WPF/Xaml新手,搜索了我面临的这个问题,但发现它很难解决。在这方面请求一些帮助 我需要在panel/listview中显示水平绑定的usercontrols数据,以便它们在满足listview/panel的宽度时自动换行,并使用垂直滚动条自动显示,如图所示。 到目前为止,我有这个代码 <ListView Grid.Row="3" ItemsSource="{Binding Controls}"
<ListView Grid.Row="3"
ItemsSource="{Binding Controls}"
VerticalAlignment="Bottom" Background="{x:Null}" BorderBrush="{x:Null}"
>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Margin="0,0,0,10"></StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="VerticalContentAlignment" Value="Bottom"/>
<Setter Property="Focusable" Value="False" />
</Style>
</ListView.ItemContainerStyle>
<!--<ListView.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding}" VerticalContentAlignment="Bottom"/>
</DataTemplate>
</ListView.ItemTemplate>-->
</ListView>
我甚至试过下面的代码。是的,它会自动换行,但不会显示滚动条
<ItemsControl Grid.Row="3"
Width="100" Height="200"
ItemsSource="{Binding Controls}"
VerticalAlignment="Bottom" Background="{x:Null}" BorderBrush="{x:Null}"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" Margin="0,0,0,10"></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
注意:我同意任何使这种情况发生的控制。不一定是列表视图。您很接近:-
将listview与scrollviewer中的wrapanel视图面板放在一起
<ScrollViewer>
<ItemsSource="{Binding Controls}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
你很接近:-
将listview与scrollviewer中的wrapanel视图面板放在一起
<ScrollViewer>
<ItemsSource="{Binding Controls}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
要包装项目,需要将ItemsPanel设置为WrapPanel,如第二个示例所示,但可能需要禁用ListView上的水平滚动:
不要忘记将Grid.Row=3从ItemsControl定义移动到ScrollViewer要包装项目,需要将ItemsPanel设置为WrapPanel,如第二个示例所示,但可能需要禁用ListView上的水平滚动:
不要忘了将Grid.Row=3从ItemsControl定义移动到ScrollViewer,因为您使用的是包裹面板,所以需要指定它的宽度。。。由于wrappanel位于items主机控制面板内部,因此wrappanel本身无法计算宽度。在您的情况下,它将尝试以水平方向获取所有宽度 以下是列表框作为项目主机的示例代码。。。在这段代码中,我将wrappanel宽度绑定到列表框的实际宽度,这样它就不会比列表框的宽度更宽,并且我还禁用了水平滚动,水平方向和垂直包装不需要水平滚动 注意:请确保在使用以下代码之前更改项目模板,它将与所有项目主机一起工作,如ListView、ItemsControl 对于ItemsControl
您正在使用“包裹”面板,因此需要指定该面板的宽度。。。由于wrappanel位于items主机控制面板内部,因此wrappanel本身无法计算宽度。在您的情况下,它将尝试以水平方向获取所有宽度 以下是列表框作为项目主机的示例代码。。。在这段代码中,我将wrappanel宽度绑定到列表框的实际宽度,这样它就不会比列表框的宽度更宽,并且我还禁用了水平滚动,水平方向和垂直包装不需要水平滚动 注意:请确保在使用以下代码之前更改项目模板,它将与所有项目主机一起工作,如ListView、ItemsControl 对于ItemsControl
谢谢,为美沙克工作,为美沙克工作为了线索,它帮助了我去地下之前可以在电话上做的一切,但是你到了那里,所以那很好:-谢谢线索,它帮助了我去地下之前可以在电话上做的一切,但是你到了那里,所以那很好:-
<ScrollViewer Grid.Row="3">
<ItemsControl ...>
<!-- .... -->
</ItemsControl>
</ScrollViewer>
<ListBox Width="500" Height="500" Name="listbox" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" Width="{Binding ActualWidth,ElementName=listbox}"></WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="100" Width="100">
<TextBlock Text="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ItemsControl Grid.Row="3"
Width="100" Height="200"
ItemsSource="{Binding Controls}"
VerticalAlignment="Bottom" Background="{x:Null}" BorderBrush="{x:Null}"
Name="listbox"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" Orientation="Horizontal" Width="{Binding ActualWidth,ElementName=listbox}"></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Template>
<ControlTemplate>
<ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Height="30" Width="30">
<TextBlock Text="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>