【发布时间】:2015-01-21 08:46:17
【问题描述】:
我想在 ListView 上显示一些数据。数据来自 HttpClient 请求,但目前并不那么重要。在 ListView 我使用 Stackpanel,其中有数据。我想根据它们的值格式化 Stackpanel 和 Stackpanel 内的 Textblocks。我可以做到,但只能以复杂的方式。 这是我的 C# 代码:
public class TransTypeToAlignConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var ttype = (int)value;
HorizontalAlignment align;
switch (ttype)
{
case 1:
case 3:
align = HorizontalAlignment.Right;
break;
case 2:
align = HorizontalAlignment.Left;
break;
case 6:
align = HorizontalAlignment.Stretch;
break;
default:
align = HorizontalAlignment.Stretch;
break;
}
return align;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
XAML 代码:
<Page.Resources>
<local:TransTypeToAlignConverter x:Key="TransTypeToAlign" />
</Page.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ListView x:Name="myList" Height="Auto" Grid.Row="1">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="10,0,10,0">
<Rectangle Fill="DarkGray" Width="320" Margin="3,18,0,0" HorizontalAlignment="{Binding transactionType, Converter={StaticResource TransTypeToAlign}}"/>
<StackPanel Width="320" Margin="0,13,3,3" HorizontalAlignment="{Binding transactionType, Converter={StaticResource TransTypeToAlign}}" Background="Gray">
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
正如我所提到的,这段代码是有效的。但我也想格式化其他东西,而不仅仅是对齐。例如,我想要一个动态的 Stackpanel 宽度,而不是固定的 320px。为此,我应该编写类似于上面的代码。我觉得类似的东西代码太多了,以后很难修改。
我有一个值 (TransType),它定义了对齐方式、堆栈面板宽度、文本块消息和文本颜色。那么,是否可以制作用于格式化 xaml 的模板?
【问题讨论】:
-
如何编写自己的元素来继承堆栈面板?
-
我粘贴了更多代码。请检查。 Stackpanel 在 Grid 中包含更多元素。
标签: xaml formatting windows-phone-8.1 conditional