这是一个关于如何使用Visual Studio来找出对象的属性和方法的问题 - 以帮助弄清楚如何使用该对象。
在下图中,在观察窗口中,我可以看到v2
的所有属性,包括IsExpanded
。但是当我输入一个' dot' intellisense弹出一组不同的属性(如果我在我的代码中尝试使用v2.IsExpanded
,我会收到错误)。
请你能简单地保持答案。 (我不确定它是一个错误还是我无知。)
(我还发布了我的项目代码(它是一个WPF应用程序),但我认为它不相关。)
<Window x:Class="ObjElements1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<TreeView Name="Tree1">
<TreeViewItem Header="Tree1.1"></TreeViewItem>
<TreeViewItem Header="Tree1.2">
<TreeViewItem Header="Tree1.2.1">
<TreeViewItem Header="Tree1.2.1.1">daslkjdlak</TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Tree1.2.1"></TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Tree1.3"></TreeViewItem>
</TreeView>
</StackPanel>
</Grid>
</Window>
namespace ObjElements1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var v2 = Tree1.Items[0];
//var v3 = v2.IsExpanded;
//var v3 = v2.IsExpandedProperty;
}
}
}
答案 0 :(得分:1)
我不熟悉WPF。通常,Visual Studio无法显示对象的智能感知。
在您的情况下,Tree1.Items[0]
是一个对象。如果你想要intellisense,你需要先将它强制转换为适当的对象。
例如,
注意: Tree1.Items[0]
可能不是TreeViewItem
,因为我不知道WPF TreeView。我希望你明白这一点。
答案 1 :(得分:0)
您必须记住在编译时键入c#。那时它的类型是Object。 当您查看运行时,您会看到Tree1.Items [0]中的当前类型,但对于编译器,它可以是任何类型的Object,并允许在Object上定义任何方法和属性。
答案 2 :(得分:0)
IntelliSense不知道Tree1.Items中的项目类型 - 它们都存储为对象。如果你想访问存储在那里的对象的属性,你就会明确地将它们从Object中转出来:
MyType v2 = (MyType)Tree1.Items[0];
v2. (...)
其中MyType是Tree1.Items [0]的实际类型。
附录: 在处理您无法完全控制的对象集合时的最佳实践(某些其他组件或方法可以在Tree1中添加/删除某些内容),您应该在尝试将其强制转换为特定类型之前验证该类型。无论哪种方式都有效:
MyType v2 = Tree1.Items[0] as MyType;
if (v2 != null) {
//Do something
}
else {
//Error
}
或者:
if (Tree1.Items[0] is MyType) {
v2 = (MyType)Tree1.Items[0];
//Do something...
}
else {
//Error
}
第一种方法的好处是只能调用Items []索引器一次。