Windows Phone 8.1 消息传递应用程序中使用的文本控件
Text control used in Windows Phone 8.1 messaging app
我需要一个类似于 WP 8.1 消息传递应用程序使用的文本控件,它显示指向 'top-left' 和 'bottom right' 的向上和向下箭头。我找不到一个。我确实看到 'whapsapp'、'line' 等其他应用程序使用类似的控件。
是否有具有该功能的现有/开源控件。任何指针或链接都会非常有帮助。
谢谢,
阿马尔
这不需要自定义控件。您可以创建一个普通的 TextBox 或 TextBlock 并在其下方(或上方)添加一个三角形。使用模板选择器根据正在聊天的人选择左侧或右侧:
Xaml:
<Page.Resources>
<DataTemplate x:Key="ChatTemplateR">
<StackPanel Margin="30,2,0,2">
<Border Background="{Binding Fill}" >
<TextBlock MinWidth="200" Text="{Binding Text}" TextWrapping="Wrap" Margin="5"/>
</Border>
<Path x:Name="DownRightTri"
HorizontalAlignment="Right"
Margin="0,0,10,0"
Fill="{Binding Fill}"
Data="M0,0 H10 V10" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ChatTemplateL">
<StackPanel Margin="0,2,30,2" >
<Path x:Name="UpLeftTri"
HorizontalAlignment="Left"
Margin="10,0,0,0"
Fill="{Binding Fill}"
Data="M0,-5 V5 H10 " />
<Border Background="{Binding Fill}" >
<TextBlock MinWidth="200" Text="{Binding Text}" TextWrapping="Wrap" Margin="5"/>
</Border>
</StackPanel>
</DataTemplate>
<local:ChatTemplateSelector x:Key="ChatSelector" LeftTemplate="{StaticResource ChatTemplateL}" RightTemplate="{StaticResource ChatTemplateR}"/>
</Page.Resources>
<Grid>
<ListView x:Name="lv" ItemTemplateSelector="{StaticResource ChatSelector}"/>
</Grid>
模板选择器:
class ChatTemplateSelector: DataTemplateSelector
{
public DataTemplate LeftTemplate { get; set; }
public DataTemplate RightTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
DataItem di = (DataItem)item;
DataTemplate dt = di.IsLeft ? this.LeftTemplate : this.RightTemplate;
return dt;
}
}
我需要一个类似于 WP 8.1 消息传递应用程序使用的文本控件,它显示指向 'top-left' 和 'bottom right' 的向上和向下箭头。我找不到一个。我确实看到 'whapsapp'、'line' 等其他应用程序使用类似的控件。
是否有具有该功能的现有/开源控件。任何指针或链接都会非常有帮助。
谢谢, 阿马尔
这不需要自定义控件。您可以创建一个普通的 TextBox 或 TextBlock 并在其下方(或上方)添加一个三角形。使用模板选择器根据正在聊天的人选择左侧或右侧:
Xaml:
<Page.Resources>
<DataTemplate x:Key="ChatTemplateR">
<StackPanel Margin="30,2,0,2">
<Border Background="{Binding Fill}" >
<TextBlock MinWidth="200" Text="{Binding Text}" TextWrapping="Wrap" Margin="5"/>
</Border>
<Path x:Name="DownRightTri"
HorizontalAlignment="Right"
Margin="0,0,10,0"
Fill="{Binding Fill}"
Data="M0,0 H10 V10" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ChatTemplateL">
<StackPanel Margin="0,2,30,2" >
<Path x:Name="UpLeftTri"
HorizontalAlignment="Left"
Margin="10,0,0,0"
Fill="{Binding Fill}"
Data="M0,-5 V5 H10 " />
<Border Background="{Binding Fill}" >
<TextBlock MinWidth="200" Text="{Binding Text}" TextWrapping="Wrap" Margin="5"/>
</Border>
</StackPanel>
</DataTemplate>
<local:ChatTemplateSelector x:Key="ChatSelector" LeftTemplate="{StaticResource ChatTemplateL}" RightTemplate="{StaticResource ChatTemplateR}"/>
</Page.Resources>
<Grid>
<ListView x:Name="lv" ItemTemplateSelector="{StaticResource ChatSelector}"/>
</Grid>
模板选择器:
class ChatTemplateSelector: DataTemplateSelector
{
public DataTemplate LeftTemplate { get; set; }
public DataTemplate RightTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
DataItem di = (DataItem)item;
DataTemplate dt = di.IsLeft ? this.LeftTemplate : this.RightTemplate;
return dt;
}
}