如何使用C#访问ListBox中的TextBlock

时间:2011-08-26 13:07:17

标签: c# windows-phone-7 xaml listbox

对于大多数人来说,这可能是一个简单的问题,但我是一个C#初学者(来自VB),并希望编写一个Windows Phone应用程序。

问题是:如何从代码中访问TextBlock“LineOne”以更改其宽度?对于页面标题,它与此完美配合(在方向更改时):

this.PageTitle.Text = "Portrait";

但是,这样的事情:

this.LineOne.width= "50";

不起作用。 为什么呢?

我的XAML看起来像这样(几乎是Visual Studio Express中的默认数据绑定应用程序):

    <!--TitlePanel -->
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
        <TextBlock x:Name="PageTitle" Text="Bundesliga" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>

    <!--ContentPanel -->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <ListBox x:Name="MainListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="MainListBox_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel x:Name="ListboxPanel" Margin="0,0,0,17" Width="432" Orientation="Horizontal">
                        <TextBlock x:Name="LineOne" Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource  PhoneTextNormalStyle}" Width="40" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您必须访问列表框中的TextBlocks。 类似的东西:

TextBlock textblock = ListboxPanel.Items[index] as TextBlock;
textblock.Width = 50

答案 1 :(得分:0)

IEnumerable<TextBlock> listtb = ListboxPanel.Items.TypeOf<TextBlock>(); 

答案 2 :(得分:0)

该名称无法解析为属于this,因为它属于datatemplate。您不能引用模板中的项目(来自该模板外部),因为可能有多个具有该名称的项目,名称必须是唯一的。

如果您尝试更改所选项目的样式,您可能会找到更好的解决方案,使用不同的视觉状态来表示这一点。

如果您尝试访问与绑定视图模型相关的属性,则可以将发件人转换为viewmodel的类型并直接访问它的属性。