对于大多数人来说,这可能是一个简单的问题,但我是一个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>
感谢您的帮助!
答案 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的类型并直接访问它的属性。