如何知道我可以在XAML中使用的WPF控件属性

时间:2015-05-28 17:29:40

标签: .net wpf xaml

我正在尝试学习WPF,当然还在努力学习XAML。我正在查看具有Items属性的the ListBox control。所以我先尝试一下:

<ListBox HorizontalAlignment="Left" Height="213" Margin="75,61,0,0" VerticalAlignment="Top" Width="218">
    <Items>
        First
        Second
        Third
    </Items>
</ListBox>

我收到编译错误:

  

Windows Presentation Foundation(WPF)不支持项目   项目

我注意到在上面链接的MSDN页面中我应该使用这种语法:

<ListBox HorizontalAlignment="Left" Height="213" Margin="75,61,0,0" VerticalAlignment="Top" Width="218">
    <ListBoxItem>First</ListBoxItem>
    <ListBoxItem>Second</ListBoxItem>
    <ListBoxItem>Third</ListBoxItem>
</ListBox>

我该怎么推断?什么WPF机制说我必须做后者,甚至不能使用某些属性(例如Items)?根据文档,ListBox控件具有Items属性,所以我缺少什么?

其次,我从this MSDN article知道我可以使用这样的数据模板:

<ListBox HorizontalAlignment="Left" Height="213" Margin="75,61,0,0" VerticalAlignment="Top" Width="218">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding XPath=@desc}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

其中有TextBlock替换数据源中的每个项目。但是,这似乎表明我将被迫像这样制定上述XAML( 工作):

<ListBox HorizontalAlignment="Left" Height="213" Margin="75,61,0,0" VerticalAlignment="Top" Width="218">
    <ListBoxItem><TextBlock>First</TextBlock></ListBoxItem>
    <ListBoxItem><TextBlock>Second</TextBlock></ListBoxItem>
    <ListBoxItem><TextBlock>Third</TextBlock></ListBoxItem>
</ListBox>

而不是:

<ListBox HorizontalAlignment="Left" Height="213" Margin="75,61,0,0" VerticalAlignment="Top" Width="218">
    <ListBoxItem>First</ListBoxItem>
    <ListBoxItem>Second</ListBoxItem>
    <ListBoxItem>Third</ListBoxItem>
</ListBox>

后者是如何工作的,我怎么推断它有效?这个魔术行为有名字吗?

2 个答案:

答案 0 :(得分:1)

如果您正在启动WPF,我可以给您最好的提示,并且您想知道哪个控件可以放在哪里,您应该直接在Visual Studio中开发,因为您将拥有将告诉您的intellisense哪个区块可以去哪里。

关于第一个问题, 在这种情况下,&#34;项目&#34;你说的是属性,不能像这样使用属性,它可以使用:

<ListBox Items="whatever"/>

<ListBox>
    <ListBox.Items>
         Something
    </ListBox.Items>
</ListBox>

<强>但是

项目不是您可以在xaml中真正使用的属性,它只是一个可以在c#代码隐藏中使用的属性,用于查看列表框中的项目。

至于第二个问题, 每个控件都有一个&#34;默认&#34;您可以在不指定的情况下设置的属性,例如&#34; TextBlock&#34;。您可以在开始和结束标记之间编写文本,而无需写下您正在修改Text属性。

<TextBlock>Test Text</TextBlock>

而不是

<TextBlock Text="Test Text"/>

在你的&#34; ListBoxItem&#34; case,默认属性是Content。如果您在其中写入文字,内容会写入文字,但您也可以在其中放置更多的块来展开文字。

<ListBox>
    <ListBoxItem>This text will appear</ListBoxItem>
    <ListBoxItem>
        <StackPanel Orientation="Vertical">
             <TextBlock Text="This text will appear in the middle"/>
             <TextBlock>This Text will appear last</TextBlock>
        </StackPanel>
    </ListBoxItem>
</ListBox>

内容属性只能容纳1件事,因此你需要放置一个&#34; StackPanel&#34;(或任何其他面板)来保存多个块。

如果您需要有关列表框的更多详细信息,可以去那里: http://www.wpf-tutorial.com/list-controls/listbox-control/

答案 1 :(得分:0)

我个人建议订阅像PluralSight或Lynda这样的东西。

你学到80%的知识,但远远少于你在书中读到的内容。

打开Visual Studio,然后按照教程视频进行操作,输入Visual Studio。如果导师领先于您,请暂停。你需要很多基础知识,这是获得它的最佳方式。挂在那里,一旦点击,WPF非常好用。

免责声明:我与这两家公司无关。