GP8*_*P89 9 c# wpf xaml c#-4.0
我对c#很陌生,我要做的第一件事就是ListView使用数据绑定,结果还不错.
我现在正试图让物品有一个扭曲按钮,如果底层模型有任何孩子(如TreeView).每个孩子的列都与所有顶级项目相同.
我该怎么做呢?这样的控件是否存在?如果不是,我会更好地打扮一个TreeView看起来像一个ListView,或打扮一个ListView看起来像TreeView?
我沿着这个解决方案中概述的道路走了一条TreeView,但最终的结果看起来非常糟糕,标题实际上只是一个项目,所以你失去了所有漂亮的列大小和列按钮,可以连接到列排序你进入,ListView这样的路线实际上似乎会更多的工作.
我注意到新任务管理器的控件与我正在尝试创建的完全一样,我不知道这是怎么做的?可能在C中.

Evi*_*key 11
Microsoft提供了一个看起来像您正在寻找的样本.可以在此处找到示例的说明:
http://msdn.microsoft.com/en-us/library/vstudio/ms771523(v=vs.90).aspx
当您构建并运行该示例时,您将得到类似于此的内容:

示例中有大量的模板,因此您可以按照自己的方式进行操作.
sa_*_*213 10
它可能会更容易Style的ListView,我有一个快速播放和管理10min左右打造一个样机.

显然你会想要添加更多内容,但TreeView在ListView列内部托管似乎很容易.
如果你想用来构建,这是模型代码.
XAML:
<Window x:Class="WpfApplication8.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="233" Width="405" Name="UI">
<Grid DataContext="{Binding ElementName=UI}">
<ListView ItemsSource="{Binding Processes}" >
<ListView.View>
<GridView>
<GridViewColumn Header="Process" Width="200" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TreeView BorderThickness="0" ItemsSource="{Binding Processes}" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Processes}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="CPU" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding CpuUsage, StringFormat={}{0} %}" TextAlignment="Right" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Memory" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding MemUsage, StringFormat={}{0} MB}" TextAlignment="Right" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="VerticalContentAlignment" Value="Top" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
代码:对于可摘树模型数据加载抱歉:)
public partial class MainWindow : Window
{
private ObservableCollection<ProcessInfo> _processes = new ObservableCollection<ProcessInfo>();
public MainWindow()
{
InitializeComponent();
Processes.Add(new ProcessInfo
{
CpuUsage = 10.3,
MemUsage = 48.9,
Processes = new ObservableCollection<Process>()
});
var pro = new Process{ Name = "Process1", Processes = new ObservableCollection<Process>()};
pro.Processes.Add(new Process { Name = "SubProcess1", Processes = new ObservableCollection<Process>() });
Processes[0].Processes.Add(pro);
Processes.Add(new ProcessInfo
{
CpuUsage = 0,
MemUsage = 100,
Processes = new ObservableCollection<Process>()
});
var pro2 = new Process { Name = "Process2", Processes = new ObservableCollection<Process>() };
pro2.Processes.Add(new Process { Name = "SubProcess1", Processes = new ObservableCollection<Process>() });
pro2.Processes.Add(new Process { Name = "SubProcess2", Processes = new ObservableCollection<Process>() });
pro2.Processes.Add(new Process { Name = "SubProcess3", Processes = new ObservableCollection<Process>() });
Processes[1].Processes.Add(pro2);
}
public ObservableCollection<ProcessInfo> Processes
{
get { return _processes; }
set { _processes = value; }
}
}
public class ProcessInfo
{
public ObservableCollection<Process> Processes { get; set; }
public double CpuUsage { get; set; }
public double MemUsage { get; set; }
}
public class Process
{
public string Name { get; set; }
public ObservableCollection<Process> Processes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
祝好运 :)