UWP:ItemsPanel 内的 ScrollViewer
UWP: ScrollViewer inside an ItemsPanel
我想创建一个数据透视表,将 DataBinding 绑定到数据透视表项列表。
这些项目中的每一个都应该被一个 ScrollViewer 包围。
不幸的是,它并不像我想的那样工作....
我的代码:
主页:
<Page
x:Class="PivotSample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:PivotSample"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Pivot Title="Pivot" SelectedItem="{Binding CurrentPivotItem, Mode=TwoWay}" ItemsSource="{Binding PivotItems}">
<Pivot.ItemTemplate>
<DataTemplate>
<ScrollViewer>
<UserControl Content="{Binding Content}"/>
</ScrollViewer>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
</Grid>
UserControl(第二个UserControl相同):
<UserControl
x:Class="PivotSample.MyUserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:PivotSample"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<StackPanel Background="Yellow">
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
</StackPanel>
视图模型:
public class ViewModelMainPage : ViewModelBase
{
private IList<PivotItem> _pivotItems;
private PivotItem _currentPivotItem;
public IList<PivotItem> PivotItems
{
get { return _pivotItems; }
set { _pivotItems = value; }
}
public PivotItem CurrentPivotItem
{
get { return _currentPivotItem; }
set
{
OnPropertyChanged(nameof(CurrentPivotItem));
_currentPivotItem = value;
}
}
}
当我启动项目时出现以下消息:“程序‘[2940] name.exe’已退出,代码为 -1 (0xffffffff)。
但是,当我用 Grid 或 StackPanel 替换 ScrollViewer 时,它会起作用,但我将看不到我的所有 PivotItem。
有什么想法吗?
(已过时,因为问题已更新)
您只能将 ItemControls
设置为 ItemsPanelTemplate 并且 Scrollviewer 不是 ItemsControl,而是 ContentControl(它只包装单个 child 并且不显示多个项目)。
此外,ItemsPanelTemplate 是您要实现的目标的错误目标:如果您想更改 Pivot 内 PivotItems 的内容,只需设置常规 ItemTemplate
.
<Pivot>
<Pivot.ItemTemplate>
<DataTemplate>
<ScrollViewer>
<!-- your content display here -->
</ScrollViewer>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
(提出一个新答案,因为问题已经改变了它的上下文。)
看起来 Pivot Control 搞砸了,如果你在它上面使用 PivotItems
的列表'
s ItemsSource
.
无论如何:这不是 DataBindings 的本意。
顾名思义,您绑定到 Data,而不是 controls 或 UI 元素。 PivotItems
是 UI 控件(虽然它们更符合逻辑而不是视觉表示)并且不应成为您的 ViewModel 的一部分。
只需将 ViewModel 中的类型更改为一些实际数据(字符串列表、对象列表或您创建的任何 类)即可正常工作
或者,如果您想在 Pivot Control 中放置固定内容,则根本不需要绑定它,只需将 PivotItems 直接放置在 Xaml:
<Pivot>
<PivotItem Header="First Item">
<!-- your content display here -->
</PivotItem>
<PivotItem Header="Secont Item">
<!-- your content display here -->
</PivotItem>
</Pivot>
我想创建一个数据透视表,将 DataBinding 绑定到数据透视表项列表。 这些项目中的每一个都应该被一个 ScrollViewer 包围。 不幸的是,它并不像我想的那样工作....
我的代码:
主页:
<Page
x:Class="PivotSample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:PivotSample"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Pivot Title="Pivot" SelectedItem="{Binding CurrentPivotItem, Mode=TwoWay}" ItemsSource="{Binding PivotItems}">
<Pivot.ItemTemplate>
<DataTemplate>
<ScrollViewer>
<UserControl Content="{Binding Content}"/>
</ScrollViewer>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
</Grid>
UserControl(第二个UserControl相同):
<UserControl
x:Class="PivotSample.MyUserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:PivotSample"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<StackPanel Background="Yellow">
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
<TextBlock Text="Test" FontSize="30" HorizontalAlignment="Center"/>
</StackPanel>
视图模型:
public class ViewModelMainPage : ViewModelBase
{
private IList<PivotItem> _pivotItems;
private PivotItem _currentPivotItem;
public IList<PivotItem> PivotItems
{
get { return _pivotItems; }
set { _pivotItems = value; }
}
public PivotItem CurrentPivotItem
{
get { return _currentPivotItem; }
set
{
OnPropertyChanged(nameof(CurrentPivotItem));
_currentPivotItem = value;
}
}
}
当我启动项目时出现以下消息:“程序‘[2940] name.exe’已退出,代码为 -1 (0xffffffff)。
但是,当我用 Grid 或 StackPanel 替换 ScrollViewer 时,它会起作用,但我将看不到我的所有 PivotItem。
有什么想法吗?
(已过时,因为问题已更新)
您只能将 ItemControls
设置为 ItemsPanelTemplate 并且 Scrollviewer 不是 ItemsControl,而是 ContentControl(它只包装单个 child 并且不显示多个项目)。
此外,ItemsPanelTemplate 是您要实现的目标的错误目标:如果您想更改 Pivot 内 PivotItems 的内容,只需设置常规 ItemTemplate
.
<Pivot>
<Pivot.ItemTemplate>
<DataTemplate>
<ScrollViewer>
<!-- your content display here -->
</ScrollViewer>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
(提出一个新答案,因为问题已经改变了它的上下文。)
看起来 Pivot Control 搞砸了,如果你在它上面使用 PivotItems
的列表'
s ItemsSource
.
无论如何:这不是 DataBindings 的本意。
顾名思义,您绑定到 Data,而不是 controls 或 UI 元素。 PivotItems
是 UI 控件(虽然它们更符合逻辑而不是视觉表示)并且不应成为您的 ViewModel 的一部分。
只需将 ViewModel 中的类型更改为一些实际数据(字符串列表、对象列表或您创建的任何 类)即可正常工作
或者,如果您想在 Pivot Control 中放置固定内容,则根本不需要绑定它,只需将 PivotItems 直接放置在 Xaml:
<Pivot>
<PivotItem Header="First Item">
<!-- your content display here -->
</PivotItem>
<PivotItem Header="Secont Item">
<!-- your content display here -->
</PivotItem>
</Pivot>