0

我想从代码隐藏中自定义ListViewa 。ScrollViewer.HorizontalScrollMode我怎样才能做到这一点?

在 XAML 中很容易:

<ListView
    x:Name="MyListView"
    ScrollViewer.VerticalScrollMode="Disabled"
    ScrollViewer.VerticalScrollBarVisibility="Hidden"
    ScrollViewer.HorizontalScrollMode="Disabled"
    ScrollViewer.HorizontalScrollBarVisibility="Auto">
    <!-- ...-->
</ListView>

但是我怎么能在 C# 或 C++/CX 代码隐藏中做到这一点呢?

4

1 回答 1

0

ScrollViewer属性(如、VerticalScrollModeVerticalScrollBarVisibility)是附加属性(就像AutomationProperties一样)。

XAML 实际上提供了两种设置这些属性的方法:

  • 属性系统 (SetValueGetValue)
  • XAML 访问器模式

我发现SetValue模式超级简单:

// C++/CX
this->MyListView->SetValue(ScrollViewer::VerticalScrollModeProperty, ScrollMode::Disabled);
this->MyListView->SetValue(ScrollViewer::VerticalScrollBarVisibilityProperty, ScrollBarVisibility::Hidden);
this->MyListView->SetValue(ScrollViewer::HorizontalScrollModeProperty, ScrollMode::Disabled);
this->MyListView->SetValue(ScrollViewer::HorizontalScrollBarVisibilityProperty, ScrollBarVisibility::Hidden);

(我没有使用其他模式)。

此方法适用于所有 AttachedProperties(请参阅此类似的 StackOverflow 问题)。


这是因为附加属性的核心是 DependencyProperties,它提供了APISetValueGetValueAPI。从附加属性的文档中:

Windows 运行时的附加属性被实现为依赖属性,因此属性系统可以将值存储在共享的依赖属性存储中。因此,附加属性在所属类上公开了一个依赖属性标识符。

于 2021-03-09T21:27:22.933 回答