我想在ListView上显示一些数据。数据来自HttpClient请求,但目前并不那么重要。在ListView中,我使用Stackpanel,在这里有数据。我想根据它们的值来设置Stackpanel内部的Stackpanel和Textblocks的格式。我能做到,但只能以复杂的方式。 这里是我的C#代码:Windows Phone 8.1条件格式化
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的例子SO? – user114111121 2014-11-23 17:41:18
我粘贴了更多的代码。请检查。 Stackpanel在Grid中包含更多元素。 – Speederer 2014-11-23 18:20:10