C#WPF用户控件的可滚动容器
我找遍了所有地方,都找不到解决问题的办法。如果我只是用错误的方法解决这个问题,我的整个方法可能都会失败,我可以重新开始 我有一个带有页眉、列表框和页脚的WPF窗口。我想通过编程将n个用户控件添加到列表框中,并使列表框本身可以滚动(而不是整个窗口)。我还想关闭当您单击列表框中的项目时发生的情况(背景突出显示为蓝色-我希望它更改用户控件的背景,现在将其视为一个大的列表框项目)。实际上,列表框甚至可能是错误的 我尝试过StackPanel、ScrollPanel和六种其他方法。Listbox正好是我现在使用的。我有十几种不同类型的usercontrols,根据业务逻辑,需要显示它们的一些组合,因此我确实需要一个可滚动的usercontrol容器,在这里我可以确定单击了哪一个(如果有的话) 这是MainWindow.XAML的XAMLC#WPF用户控件的可滚动容器,c#,wpf,xaml,C#,Wpf,Xaml,我找遍了所有地方,都找不到解决问题的办法。如果我只是用错误的方法解决这个问题,我的整个方法可能都会失败,我可以重新开始 我有一个带有页眉、列表框和页脚的WPF窗口。我想通过编程将n个用户控件添加到列表框中,并使列表框本身可以滚动(而不是整个窗口)。我还想关闭当您单击列表框中的项目时发生的情况(背景突出显示为蓝色-我希望它更改用户控件的背景,现在将其视为一个大的列表框项目)。实际上,列表框甚至可能是错误的 我尝试过StackPanel、ScrollPanel和六种其他方法。Listbox正好是我现
<Window x:Class="LayoutTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:customUserControls="clr-namespace:LayoutTest.Properties"
Title="Layout Sample" Height="Auto" MaxWidth="600" MinWidth="600" Width="600" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="393*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="24" TextAlignment="Center" Margin="5,5,210,5">Header</TextBlock>
<ListBox x:Name="lstPanels" Grid.Row="1" Grid.ColumnSpan="2" HorizontalContentAlignment="Stretch" Margin="0,0,0,17"/>
<TextBlock Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="24" TextAlignment="Center" Margin="5,5,210,5">Footer</TextBlock>
</Grid>
</Window>
标题
页脚
这是UserControl1.XAML的XAML
<UserControl x:Class="LayoutTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="500" Padding="0" Margin="10">
<Border BorderThickness="2" BorderBrush="OrangeRed" CornerRadius="10">
<StackPanel Orientation="Horizontal">
<Image x:Name="imgLogo" MinWidth="100" MinHeight="100" MaxWidth="100" MaxHeight="100" />
<Grid MinWidth="400">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="108*" />
<ColumnDefinition Width="104*" />
<ColumnDefinition Width="188*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="25*" />
<RowDefinition Height="35*" />
</Grid.RowDefinitions>
<TextBlock Text="xxxxx:" Margin="5,2,2,2" />
<TextBlock Grid.Column="1" Grid.ColumnSpan="2" Text="xxxxx" Margin="2" />
<TextBlock Text="xxxxx:" Grid.Row="1" Margin="5,2,2,2" />
<TextBlock Grid.Column="1" Grid.Row="1" Text="xxxxxx" Grid.ColumnSpan="2" Margin="2" />
<CheckBox Content="xxxxxx" Grid.Row="3" Name="chkSkipConfiguration" Grid.ColumnSpan="2" VerticalAlignment="Center" Margin="0,0,112,5" Width="200" HorizontalAlignment="Right" />
<Button Content="xxxxx" Grid.Column="2" Grid.Row="3" Padding="0" HorizontalAlignment="Right" Width="50" Margin="0,0,19,0" />
</Grid>
</StackPanel>
</Border>
</UserControl>
最后,在MainWindow.xaml.cs的构造函数中,有以下代码段用于创建10个用户控件实例:
for(int i=0; i<10; i++)
{
lstPanels.Items.Add(new UserControl1());
}
用于(int i=0;i只是即兴的…有什么原因不能用ScrollViewer包装东西,并让包含的控件通过传递消息来响应单击吗?ScrollViewer:首先明确地或通过在容器中拉伸列表框来给列表框一个高度和宽度。使用列表框,您可以定义一个垂直的滚动条using ScrollViewer.VerticalScrollBarVisibility=“Visible”。如果定义了一个高度,则当添加的项目超出该高度时,它应自动启用滚动
就高亮显示而言,请尝试此setter。只需将其放置在针对ListBoxItem类型的样式中:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="border" Background="Transparent">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="border" Property="Background">
<Setter.Value>Transparent</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
透明的
在一个点上我尝试了ScLoVIEWS,但是滚动了整个页面。我找不到任何方法来在页面中间得到一组用户控件,同时保持页眉和页脚在任何时候都可见。文档中的示例有ScReVIEW作为顶层元素。可能是这样的,但是我不能得到语法R。当我尝试它时,我只是尝试用scrollviewer替换listbox,并在scrollviewer中放置了一个stackpanel。然后,我将我的UserControl添加到stackpanel.children而不是listbox.items中,得到了相同的结果。我能够让listbox滚动,因此感谢您,但我仍然坚持使用这种样式。使用此标记选择ng listitem会删除默认的蓝色背景,因此这绝对是一个改进。我需要对其进行哪些更改以设置UserControl(listboxitem包含的内容)的背景色相反?UserControl,如我的原始示例所示,有一个橙色边框。如果单击该项时,我能够将UserControl边框内的空间着色,那就太好了。谢谢!如果您将该样式保留在ListBoxItem上,我相信您可以通过向控件添加一个名为IsSelected的属性来实现您想要的效果。如果您处理Border元素的PreviewMouseDown或PreviewMouseUp,并将IsSelected设置为!IsSelected每个事件,然后可以为IsSelected属性添加DataTrigger以更改边框或网格的背景。