Windows Phone ListBox 是否有 asp:Repeater 的 OnItemDataBound 类似事件?



在Web表单中,Repeater有一个事件OnItemDataBound
Windows Phone应用程序中的ListBox是否有类似事件
我正在尝试开发一些类似聊天(发信息)的东西,我需要将StackPanel放在不同的一边
有什么想法吗?

Xaml

<ListBox Name="TicketReplyListBox" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Background="Blue" MaxHeight="200" Width="400" HorizontalAlignment="Left">
                <TextBlock Text="{Binding ContentText}"
                     FontSize="18"
                     FontFamily="ResourcesFontssylfaen.ttf#sylfaen"
                     FontWeight="Bold"
                     TextWrapping="Wrap"
                     Margin="6,12,6,6"
                     HorizontalAlignment="Left"
                     VerticalAlignment="Top" />
                <TextBlock Text="{Binding Date}"
                     HorizontalAlignment="Right"
                     VerticalAlignment="Top"
                     Margin="6,0,6,6"
                     FontSize="18"
                     FontFamily="Segoe WP SemiLight" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

代码:

public class TicketReplyModel
{
    public int TicketID { get; set; }
    public string ContentText { get; set; }
    public bool IsClient { get; set; }
    public DateTime Date { get; set; }
}
Service1Client WCFClient = new ServiceReference1.Service1Client();
public ActiveTicketDetail()
{
     InitializeComponent();
     WCFClient.GetTicketReplyListCompleted += new EventHandler<GetTicketReplyListCompletedEventArgs>(WCFClient_GetTicketReplyListCompleted);
     WCFClient.GetTicketReplyListAsync(84);  
}
void WCFClient_GetTicketReplyListCompleted(object sender, GetTicketReplyListCompletedEventArgs e)
{
     List<TicketReplyModel> TickteReptyList = new List<TicketReplyModel>();
     TickteReptyList = e.Result.ToList();
     TicketReplyListBox.ItemsSource = TickteReptyList;
}

在每次迭代中,我都希望根据IsClient 的值在不同的一侧对齐StackPanel

找到解决方案

Xaml:

<ScrollViewer>
    <StackPanel x:Name="Tikcetst">
    </StackPanel>
</ScrollViewer>

代码:

public ActiveTicketDetail()
        {
            InitializeComponent();
            WCFClient.GetTicketReplyListCompleted += new EventHandler<GetTicketReplyListCompletedEventArgs>(WCFClient_GetTicketReplyListCompleted);
            WCFClient.GetTicketReplyListAsync(84);

        }
        void WCFClient_GetTicketReplyListCompleted(object sender, GetTicketReplyListCompletedEventArgs e)
        {
            List<TicketReplyModel> TickteReptyList = new List<TicketReplyModel>();
            TickteReptyList = e.Result.ToList();
            TickteReptyList.ForEach(item =>
            {
                TextBlock txtBl1 = new TextBlock();
                txtBl1.Text = item.ContentText;
                txtBl1.Padding = new Thickness(5);
                txtBl1.FontSize = 18;
                TextBlock txtBl2 = new TextBlock();
                txtBl2.Text = item.Date.ToShortDateString();
                txtBl2.Padding = new Thickness(5);                
                txtBl2.FontSize = 14;
                txtBl2.HorizontalAlignment = HorizontalAlignment.Right;
                StackPanel st = new StackPanel();
                st.Children.Add(txtBl1);
                st.Children.Add(txtBl2);
                st.Width = 400;                
                st.HorizontalAlignment = item.IsClient ? HorizontalAlignment.Right : HorizontalAlignment.Left;
                st.Margin = new Thickness(5);
                string fileName = item.IsClient ? "Images/MessagecollorMe.png" : "Images/MessagecollorBank.png";
                BitmapImage image = new BitmapImage(new Uri(fileName, UriKind.Relative));
                ImageBrush brush = new ImageBrush();
                brush.ImageSource = image;
                st.Background = brush;
                Tikcetst.Children.Add(st);
            });
        }

最新更新