【问题标题】:Windows 8 Need to create a wizard custom control [closed]Windows 8 需要创建向导自定义控件 [关闭]
【发布时间】:2014-01-29 16:50:03
【问题描述】:

标题##我正在创建一个 Windows 8 应用程序,我需要在其中创建一个向导控件。该控件如下所示:

这些步骤应该只允许导航到上一步或当前步骤,下一步应该被禁用,并且只能在从下一步按钮导航后启用。如图所示,步骤 4 和步骤 5 被禁用,因为当前步骤是步骤 3。

每一步都会有一个我认为应该是自定义控件的表单。

我需要使这个向导动态化,以便只发送自定义控件列表,它应该自动生成所有 UI,如图所示。

我应该如何创建或处理这个问题,因为我可能需要 n 个表单来优化它以提高性能。请告诉我您的建议?

根据建议创建了一个示例代码:

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <ListView x:Name="lstVwSelectItem" >
            <ListViewItem>1</ListViewItem>
            <ListViewItem>2</ListViewItem>
        </ListView>

        <ContentControl Grid.Column="1" Content="{Binding SelectedIndex, ElementName=lstVwSelectItem}" 
                        ContentTemplateSelector="{StaticResource myAppBarSelector}">
            <ContentControl.Resources>
                <DataTemplate x:Key="0">
                    <TextBlock Text="Hello 1" Foreground="White" />
                </DataTemplate>

                <DataTemplate x:Key="1">
                    <TextBlock Text="Hello 2" Foreground="White" />
                </DataTemplate>
            </ContentControl.Resources>
        </ContentControl>   
    </Grid>

 public class AppBarSelector : DataTemplateSelector
    {
        protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
        {
            if (item == null) return base.SelectTemplateCore(item, container);

            var contentControl = (ContentControl)container;
            var templateKey = Convert.ToString(item);

            if (contentControl.Resources.ContainsKey(templateKey))
            {
                return (DataTemplate)contentControl.Resources[templateKey];
            }
            else
            {
                return (DataTemplate)contentControl.Resources["0"];
            }
        }
    }

【问题讨论】:

  • 如果你做错了什么,除了可能的内存泄漏之外,你似乎并没有遇到性能问题。另外我认为你的问题有点太宽泛了。您尝试过什么,您的具体问题是什么?您是想创建一个您或其他人希望在多个应用程序中使用的可重用控件,还是只是为您的应用程序提供一些快速的东西?

标签: c# xaml windows-8 custom-controls winrt-xaml


【解决方案1】:

左边的部分看起来像一个绑定到步骤列表的ItemsControl。右侧的部分看起来像一个面板,其中有两个按钮绑定到ICommand 属性和一个ContentControl 绑定到CurrentStep 视图模型和一个ContentTemplateSelector 设置为DataTemplateSelector 实现。很可能不是ContentControlDataTemplate 为每个步骤使用自定义控件,您可以将另一个ItemsControl 绑定到具有ItemTemplateItemTemplateSelector 的表单字段视图模型列表以启用编辑每个那些。

【讨论】:

  • 确保有内容控制并将其绑定到左侧列表视图的选定索引,然后根据选定的步骤选择正确的 DataTemplate 将有助于完成任务。我在上面的问题中创建了一些示例并进行了编辑。你能告诉我它是否正确或可以更好地改进。我什至需要禁用接下来的步骤,我该如何做到这一点?
  • 嗨 Filip,你能把你的 cmets 发给我吗...
  • 嗨,Jerry,我已经创建了这个,但我想为 MVVM 框架中的每个步骤动态添加自定义控件。我希望该用户在完成上一步之前不能进入下一步。我如何以 MVVM 方式使用 Flipview 来实现这一点。
  • 您可以将FlipView 绑定到一个ItemsSource 集合,该集合仅包括允许用户导航到的一组步骤,并在完成之前的步骤时添加新步骤。另外 - 你确定你真的需要防止跳过这些步骤吗?也许您可以突出显示左侧显示的索引中不完整的步骤。这通常是人们对向导施加的一种人为限制,实际上并没有达到目的,只会激怒用户......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2017-01-22
  • 1970-01-01
  • 2010-12-31
相关资源
最近更新 更多