xamlのタグがつけられたコード一覧

C# タイムラインの文字列表示処理

		public static void TwitterObectToInline(InlineCollection inlines, CoreTweet.Core.CoreBase obj, bool clearInlines = false)
		{
			if (obj == null || obj == null) return;

			// 内容の消去
			if (clearInlines) inlines.Clear();

			string text = null;
			IList<Entity> dic = null;

			// エンティティのリスト作成
			if (obj is Status)
			{
				var status = (Status)obj;
				text = status.Text;
				dic = ConcatArray<Entity>( // エンティティの結合
					status.Entities.UserMentions,
					status.Entities.Urls,
					status.Entities.Symbols,
					status.Entities.Media,
					status.Entities.HashTags);
			}
			else if (obj is DirectMessage)
			{
				var message = (DirectMessage)obj;
				text = message.Text;
				dic = ConcatArray<Entity>(
					message.Entities.UserMentions,
					message.Entities.Urls,
					message.Entities.Symbols,
					message.Entities.Media,
					message.Entities.HashTags);
			}

			if (dic == null) return;

			if (dic.Count > 0)
			{
				// エンティティが含まれている場合

				// エンティティの出現番号順に並び替え
				dic = dic.OrderBy(entity => entity.Indices[0]).ToList();

				// エンティティの開始が0文字目で無い場合に文字列を挿入
				if (dic[0].Indices[0] != 0)
					inlines.Add(HttpUtility.HtmlDecode(text.Substring(0, dic[0].Indices[0])));

				// エンティティの追加
				dic.ForEach((entity, index) =>
				{
					// *** リンクの生成 ***
					var link = new Hyperlink()
					{
						Cursor = Cursors.Hand,
					};

					if (entity is UserMentionEntity)
					{
						var user = (UserMentionEntity)entity;
						link.Inlines.Add(string.Format("@{0}", user.ScreenName));
					}
					else if (entity is UrlEntity)
					{
						var url = (UrlEntity)entity;
						link.Inlines.Add(url.DisplayUrl);
					}
					else if (entity is SymbolEntity)
					{
						var symbol = (SymbolEntity)entity;
						link.Inlines.Add(string.Format("{0}{1}",
							text[symbol.Indices[0]] == '$' ? '$' : '#',
							symbol.Text));
					}
					else if (entity is MediaEntity)
					{
						var media = (MediaEntity)obj;
						link.Inlines.Add(media.MediaUrl.AbsoluteUri);
					}

					inlines.Add(link);

					// *** エンティティ間/前後の文字列の挿入 ***

					var len = entity.Indices[1]; // エンティティの文字列の最終
					if (len != text.Length)
					{
						if (dic.Count > index + 1)
							inlines.Add(HttpUtility.HtmlDecode(
								text.Substring(len, dic[index + 1].Indices[0] - len)));

						else
							inlines.Add(HttpUtility.HtmlDecode(
								text.Substring(len, text.Length - len)));
					}
				});
			}
			else inlines.Add(HttpUtility.HtmlDecode(text));

			dic.Clear();
			dic = null;
		}

XML タイムラインのTreeView

<TreeView ItemTemplate="{StaticResource StatusDataTemplate}" Margin="0" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.CanContentScroll="True" BorderThickness="0" Background="Transparent" x:Name="listContent"
		 VirtualizingStackPanel.VirtualizationMode="Standard" VirtualizingStackPanel.IsVirtualizing="False"  ScrollViewer.PanningMode="VerticalOnly" ScrollViewer.PanningDeceleration="5" IsManipulationEnabled="True">
	<!--  VirtualizingStackPanel.IsVirtualizing="True" -->
	<TreeView.Resources>
		<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarButtonHeightKey}">60</sys:Double>
	</TreeView.Resources>
	<TreeView.ItemsPanel>
		<ItemsPanelTemplate>
			<VirtualizingStackPanel />
		</ItemsPanelTemplate>
	</TreeView.ItemsPanel>
	<TreeView.ItemContainerStyle>
		<Style TargetType="{x:Type TreeViewItem}">
			<EventSetter Event="MouseDown" Handler="OnItemMouseDown" />
			<Setter Property="Template">
				<Setter.Value>
					<ControlTemplate TargetType="{x:Type TreeViewItem}">
						<ContentPresenter x:Name="PART_Header" ContentSource="Header" />
					</ControlTemplate>
				</Setter.Value>
			</Setter>
			<Setter Property="Width">
				<Setter.Value>
					<Binding Path="ActualWidth"
						RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type ScrollContentPresenter}}" />
				</Setter.Value>
			</Setter>
		</Style>
	</TreeView.ItemContainerStyle>
</TreeView>

よく投稿されているコード

タグ

最近投稿されたコード