2 回答

TA貢獻1860條經驗 獲得超8個贊
找到了一個有效的 C#、XAML 組合。我將此添加到我的MainPage():
// Add an event handler for the ContainerContentChanging event of the ListView
MessagesList.ContainerContentChanging += OnContainerContentChanging;
在同一個文件中添加了這個函數(shù):
private void OnContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
{
if (args.InRecycleQueue) return;
// Currently we are adding messages to the ListView.ItemSource as Activity objects
// since this handler is called when the content changes (an item is added)
// intercept the item as an activity and set its horizontal alignment accordingly
Activity message = args.Item as Activity;
args.ItemContainer.HorizontalAlignment = (message.From.Name == botHandle) ? HorizontalAlignment.Right : HorizontalAlignment.Left;
}
上面的代碼對應于ListView上面文件的 XAML 中的我的(及其模板):
<Page.Resources>
<DataTemplate x:Key="MessagesListDataTemplate">
<Grid x:Name="TextB" Background="White" VerticalAlignment="Center" Margin="5, 5, 5, 5">
<Border>
<TextBlock Text="{Binding Text}" TextWrapping="Wrap" MaxWidth="500" />
</Border>
</Grid>
</DataTemplate>
</Page.Resources>
<ListView x:Name="MessagesList" Grid.Row="1" ItemTemplate="{StaticResource MessagesListDataTemplate}" Margin="5, 5, 5, 15"/>

TA貢獻1813條經驗 獲得超2個贊
您可以在模型中添加一個附加屬性,例如IsUserText,然后創(chuàng)建兩個TextBlock左對齊和另一個右對齊,您可以根據(jù)屬性設置VisibilityTextBlock 的IsUserText屬性。
你DataTemplate應該看起來像這樣:
<DataTemplate x:Key="MessagesListDataTemplate">
<Grid x:Name="Text" Background="White" VerticalAlignment="Center" Margin="5, 5, 5, 5">
<Border BorderThickness="2" BorderBrush="deepskyblue" CornerRadius="7">
<TextBlock Text="{Binding Text}" TextWrapping="Wrap" HorizontalAlignment="Left" Visibility={Binding IsUserText, Converter={StaticResource InverserBoolToVisibilityConverter}} Margin="5, 5, 5, 5" />
</Border>
<Border BorderThickness="2" BorderBrush="deepskyblue" CornerRadius="7">
<TextBlock Text="{Binding Text}" TextWrapping="Wrap" HorizontalAlignment="Right" Visibility={Binding IsUserText, Converter={StaticResource BoolToVisibilityConverter}} Margin="5, 5, 5, 5" />
</Border>
</Grid>
</DataTemplate>
編輯:
另外,如果您不想使用 two TextBlock's,您可以編寫轉換器 forHorizontalAlignment并且可以設置LeftorRight基于'IsUserText屬性
- 2 回答
- 0 關注
- 111 瀏覽
添加回答
舉報