【问题标题】:Folder/files interface in XAML, proper control choice?XAML 中的文件夹/文件接口,正确的控制选择?
【发布时间】:2012-05-08 17:31:46
【问题描述】:

这是我想要实现的界面:

基本上,这是 1 级深度结构,其中包含文件夹和文件夹内的文件。 您看到的屏幕截图是我尝试在ItemsControl 内使用ItemsControlListBox 进行此操作

我需要的东西:

  1. 文件夹不可选择。没有交互,只是显示它们。
  2. 一次只能“选择”一个文件
  3. 文件可以从一个文件夹拖放到另一个文件夹
  4. 一切都在 MVVM 中完成

现在以我的方式 - 多个 ListBoxes 因此专注于多个元素,这是不好的。

我还不知道如何实现拖放。

我正在考虑TreeView 控制,但不确定它是如何工作的。

我正在寻找有关如何实现此方案的指针。

【问题讨论】:

    标签: silverlight xaml mvvm drag-and-drop treeview


    【解决方案1】:

    一个TreeView,两个TreeViewItems 样式“FolderLevelStyle”和“FileLevelStyle”。从 Blend 中提取它们的默认样式。

    在“FolderLevelStyle”中,删除 IsMouseOverIsSelected 属性的所有触发器。另外,将ItemContainerStyle 设置为“FileLevelStyle”。

    这会给你点 1 和 2。

    [in "FolderLevelStyle"] 您还可以将IsExpanded 设置为True 并在控件模板中折叠ToggleButton(包括删除影响该按钮的所有触发器) - 这将不允许用户“关闭" 文件夹。

    关于拖放,有几种方法。开始here。了解如何将其集成到 MVVM 架构中。我倾向于创建一个Behavior(或附加行为),它将在文件项的DataTemplate 的根面板上设置。

    【讨论】:

    • 谢谢!这与我的想法一致。我想我将不得不创建一个对象FolderOrFileItem,它将包含 List 并使用一些开关来确定使用哪一个?我将如何bind 取决于项目的正确风格?我应该为此使用 DataTemplateSelector 吗?
    • 我让它在一定程度上工作,但我不知道如何根据绑定项目应用不同的样式。有什么建议吗?
    • 在您的情况下,您不必将其视为“按类型选择样式”,而是将其视为“第一级 - 样式 1;第二级 - 样式 2”。因此,考虑到上述答案的命名,在“FolderLevelStyle”中添加<Setter Property="ItemContainerStyle" Value="{DynamicResource FileLevelStyle}"/>
    • 试过这种方式 - 不行。它不拾取 FileLevelStyle。 Silverlight 不支持 DynamicResource,我用的是 StaticResource,可能是这个原因?
    • 抱歉,忘记是SL了。确保“FileLevelStyle”与“FolderLevelStyle”写在同一个 ResourceDictionary 中,并且在 XAML 中高于它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多