我想在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