我在屏幕的左侧有一个树视图,当我点击任何TreeViewItem时,我希望屏幕的右侧相应地改变。
例如,单击“项目”将显示在屏幕的右半部分,项目名称的标签以及文本框中的项目名称,以及其他一些字段的类似标签 - 文本框对。单击“项目”的子选项(例如“任务1”)应更改屏幕的右半部分,以便代替项目名称和详细信息的标签和文本框,现在应该是任务名称/详细信息。 Atm,我只关心标签文本框对,但将来我需要一些更复杂的选项,可能是按钮和表格。
我想到的是为每个选项预制一个网格,当我点击“项目”时,会有一个显示项目所有信息的网格。然后,当我单击“任务1”时,应隐藏项目网格,并显示任务网格,并填写字段。
这可能吗?我应该使用什么来创建我可以选择的模板?
答案 0 :(得分:0)
Firoz已经提到了重要的一点。粗略猜测是您没有使用MVVM模式,因此为了最大限度地减少调整工作量,您可以在窗口中添加Content Control
,并在进行选择时设置此控件的内容。您可以在其中放置任何用户控件。
使用 MVVM 意味着您将Content Control
绑定到ViewModel
(UIElement
或UserControl
类型)的属性并设置每当绑定的选定值更改时实例。说到选定的值,我认为默认的TreeView
并不是真正的绑定友好的,所以你最终可能会遇到为你做绑定的行为。
答案 1 :(得分:0)
你要做的事情很简单,也很可能,但我认为你的想法不够大。
随着项目的增长以及您想要展示的不同内容的数量的增加,您将需要显示和隐藏越来越多的控件。这很快就会变得无法管理。相反,考虑一些其他控件处理这个问题,在某些方面你做的事情就像一个标签式对话框,只是一组分层标签。
选项卡式对话框有一个面板和一组选项卡,当您单击每个选项卡时,面板的内容会发生变化。实际上,您可以为要显示的每个专用UI集创建UserControl
个,例如:您可以使用ProjectControl
显示所有项目文本框,标签,按钮等。
此外,WPF还有一个名为DataTemplate
的简洁功能,它们定义了数据类型在显示时的外观。所以,如果你有一个
public class MyProject
{
public string Name {get;set;}
}
然后你可以定义
<DataTemplate DataType="{x:Type MyProject}>
<TextBox Text="{Binding Name}"/>
</DataTemplate>
如果您将数据设置为标签面板的内容,WPF会自动将数据转换为可视形式。
然而,面板中的这种类型的显示内容并不是唯一执行此操作的WPF控件。还有一种称为NavigationFrame
的东西,它也可以用作NavigationWindow
包裹在窗口中。此控件提供了导航到要显示的下一个Page
的方法。 Page
可以像选项卡式对话框中的UserControl
一样,但也可以是URI,如果您愿意,可以从网络链接内容。此外,您可以从其他控件调用NavigateTo
,从而构建更多可用的界面。
我在
中完成了构建完整Windows控制面板样式界面的过程我之后添加了VS2012风格的发光
然后在
中将整个源代码作为开源发布
这支持使用
嵌入导航面板<WinChrome:SearchableNavigationWindow
x:Class="WinChrome.Win7Demo.MainWindow"
...
xmlns:WinChrome="clr-namespace:WinChrome;assembly=WinChrome"
Style="{StaticResource Win7NavigationWindow}">
<WinChrome:SearchableNavigationWindow.Navigation>
<view:Navigation x:Name="navigationTree"/>
</WinChrome:SearchableNavigationWindow.Navigation>
导航窗口嵌入的位置,但也可以是TreeView。
<UserControl x:Class="WinChrome.View.Navigation" ...>
<ScrollViewer HorizontalScrollBarVisibility="Disabled" Padding="12,0"
VerticalScrollBarVisibility="Auto" >
<StackPanel>
<Button
Margin="0,12,0,0" Style="{StaticResource LinkNavigatorButtonStyle}"
Content="Home"
Command="{Binding
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Win7Demo:MainWindow}, AncestorLevel=1},
Path=GoHomeCommand}" />
</StackPanel>
</ScrollViewer>