Dun*_*can 4 wpf user-interface dynamic
在WinForms中,在运行时为其他面板交换面板相对容易.在WPF中,这似乎相当复杂(特别是来自XAML).
任何人都可以提供关于在运行时交换gui元素的"最佳实践"方式的明确指导(在向导类型情况下考虑页面).
非常感谢.
这可以使用datatemplates和/或触发器在XAML中进行处理.例如,如果向导中的每个页面都作为单独的类或对象在底层模型中表示,则可以使用以下两个选项之一...两者都使用ContentControl,这是内容变化时的完美控件在相同数据的不同视图之间.
请注意,绑定旨在作为伪代码示例,只是为了传达意图!
基于DataTemplate,为每个页面使用不同的类:
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type WizardPageOne}">
<!-- page 1 layout here -->
</DataTemplate>
<DataTemplate DataType="{x:Type WizardPageTwo}">
<!-- page 2 layout here -->
</DataTemplate>
<!-- ... etc -->
</Grid.Resources>
<ContentControl Content="{Binding CurrentPageModel, Source=Wizardmodel}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
或者基于触发器,使用指示当前页面的属性:
<ContentControl Content="{Binding WizardModel}">
<ContentControl.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentPageIndex} Value="1">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!-- page 1 layout here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding CurrentPageIndex} Value="2">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!-- page 2 layout here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<!-- .... etc -->
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)
这两个选项只会根据需要加载每个页面的控件,因此您不会在窗口中"加载但隐藏"所有控件.
| 归档时间: |
|
| 查看次数: |
4334 次 |
| 最近记录: |