質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1635閲覧

Styleで既に配置したコントロール内にコントロールを配置したい

popaii

総合スコア10

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

0クリップ

投稿2020/05/25 05:04

編集2020/05/26 06:35

前提・実現したいこと

一度XAMLで配置した複数のTextBlockコントロール全ての中に新たにRunコントロールとInlineUiContainerコントロールを配置したいです。
以下のようにStyleでTagetTypeをTextBlockとすることで、すでに配置したコントロールの中に新たにコントロールを配置することは可能でしょうか。

<Style TargetType="TextBlock"> <Setter Property="" Value="" /> <Setter Property="" Value="" /> </Style>

C#のChildプロパティやChildrenプロパティのようなものを探していたのですが、見当たらなかったのでこちらで質問させていただきました。

試したこと

Styleについては以下のリンクを参考にしました。

https://www.atmarkit.co.jp/ait/articles/1009/07/news096_2.html[連載:WPF入門:
第4回 WPFの「リソース、スタイル、テンプレート」を習得しよう (2/3)]

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/05/25 05:10

親子と言っても色々考えられますが、具体的にどうなればいいんですか?
TN8001

2020/05/25 22:47

複数使う Styleを用いる ということは何かが共通で、なにかは別の値になるんですよね? どこが同じでどこが変わる部分なんでしょう? 複数個の使われ方等もう少し具体的な例を提示できませんか? 何に困っていてどうなればいいのかがちょっと読み取れないです。
popaii

2020/05/26 06:36

ご指摘ありがとうございます。 質問内容を編集したのでご確認頂ければ幸いです。
guest

回答1

0

ベストアンサー

TextBlockは軽量コンポーネントとしてFrameworkElement派生なので、Template等がなくあんまり凝ったことはできないです。

今の解釈でこういうことかな??というサンプルを作りました。
LabelTextBoxButtonはいろいろ置いてあるよって程度の意味です。
Canvasベースなのも特別意味はありません。

添付ビヘイビアはいろいろとガバガバなので、このままでは使い物にならないだろうと思います。

xml

1<Window 2 x:Class="Questions264652.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:local="clr-namespace:Questions264652" 6 Width="800" 7 Height="450"> 8 <Grid> 9 <Grid.RowDefinitions> 10 <RowDefinition /> 11 <RowDefinition /> 12 </Grid.RowDefinitions> 13 <Grid.ColumnDefinitions> 14 <ColumnDefinition /> 15 <ColumnDefinition /> 16 </Grid.ColumnDefinitions> 17 <GroupBox Header="今の状態"> 18 <Canvas> 19 <TextBlock 20 Canvas.Left="35" 21 Canvas.Top="24" 22 Text="ほげほげ" /> 23 <TextBlock 24 Canvas.Left="177" 25 Canvas.Top="49" 26 Text="ふがふが" /> 27 <Label 28 Canvas.Left="114" 29 Canvas.Top="122" 30 Content="Label" /> 31 <TextBox 32 Canvas.Left="194" 33 Canvas.Top="126" 34 Text="TextBox" /> 35 <Button 36 Canvas.Left="282" 37 Canvas.Top="125" 38 Content="Button" /> 39 </Canvas> 40 </GroupBox> 41 42 <GroupBox Grid.Column="1" Header="こうなるといいなの状態"> 43 <Canvas> 44 <TextBlock Canvas.Left="35" Canvas.Top="24"> 45 <InlineUIContainer BaselineAlignment="Center"> 46 <Image Width="20" Source="https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail_32x32.jpg" /> 47 </InlineUIContainer> 48 <Run>ほげほげ</Run> 49 <Bold>!!</Bold> 50 </TextBlock> 51 <TextBlock Canvas.Left="177" Canvas.Top="49"> 52 <InlineUIContainer BaselineAlignment="Center"> 53 <Image Width="20" Source="https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail_32x32.jpg" /> 54 </InlineUIContainer> 55 <Run>ふがふが</Run> 56 <Bold>!!</Bold> 57 </TextBlock> 58 <Label 59 Canvas.Left="114" 60 Canvas.Top="122" 61 Content="Label" /> 62 <TextBox 63 Canvas.Left="194" 64 Canvas.Top="126" 65 Text="TextBox" /> 66 <Button 67 Canvas.Left="282" 68 Canvas.Top="125" 69 Content="Button" /> 70 </Canvas> 71 </GroupBox> 72 73 <GroupBox Grid.Row="1" Header="テンブレート"> 74 <Canvas> 75 <Canvas.Resources> 76 <Style TargetType="ContentControl"> 77 <Setter Property="Template"> 78 <Setter.Value> 79 <ControlTemplate TargetType="ContentControl"> 80 <TextBlock> 81 <InlineUIContainer BaselineAlignment="Center"> 82 <Image Width="20" Source="https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail_32x32.jpg" /> 83 </InlineUIContainer> 84 <Run Text="{TemplateBinding Content}" /> 85 <Bold>!!</Bold> 86 </TextBlock> 87 </ControlTemplate> 88 </Setter.Value> 89 </Setter> 90 </Style> 91 </Canvas.Resources> 92 <ContentControl 93 Canvas.Left="35" 94 Canvas.Top="24" 95 Content="ほげほげ" /> 96 <ContentControl 97 Canvas.Left="177" 98 Canvas.Top="49" 99 Content="ふがふが" /> 100 <Label 101 Canvas.Left="114" 102 Canvas.Top="122" 103 Content="Label" /> 104 <TextBox 105 Canvas.Left="194" 106 Canvas.Top="126" 107 Text="TextBox" /> 108 <Button 109 Canvas.Left="282" 110 Canvas.Top="125" 111 Content="Button" /> 112 </Canvas> 113 </GroupBox> 114 115 <GroupBox 116 Grid.Row="1" 117 Grid.Column="1" 118 Header="添付ビヘイビア"> 119 <Canvas> 120 <Canvas.Resources> 121 <InlineUIContainer 122 x:Key="image" 123 x:Shared="False" 124 BaselineAlignment="Center"> 125 <Image Width="20" Source="https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail_32x32.jpg" /> 126 </InlineUIContainer> 127 <Bold x:Key="exclamation" x:Shared="False">!!</Bold> 128 129 <Style TargetType="TextBlock"> 130 <Setter Property="local:AddInlineBehavior.Before" Value="{StaticResource image}" /> 131 <Setter Property="local:AddInlineBehavior.After" Value="{StaticResource exclamation}" /> 132 <Setter Property="local:AddInlineBehavior.Use" Value="True" /> 133 </Style> 134 </Canvas.Resources> 135 136 <TextBlock 137 Canvas.Left="35" 138 Canvas.Top="24" 139 Text="ほげほげ" /> 140 <TextBlock 141 Canvas.Left="177" 142 Canvas.Top="49" 143 Text="ふがふが" /> 144 <Label 145 Canvas.Left="114" 146 Canvas.Top="122" 147 Content="Label" /> 148 <TextBox 149 Canvas.Left="194" 150 Canvas.Top="126" 151 Text="TextBox" /> 152 <Button 153 Canvas.Left="282" 154 Canvas.Top="125" 155 Content="Button" /> 156 </Canvas> 157 </GroupBox> 158 </Grid> 159</Window>

cs

1using System.Windows; 2using System.Windows.Controls; 3using System.Windows.Documents; 4 5namespace Questions264652 6{ 7 public class AddInlineBehavior 8 { 9 public static DependencyProperty UseProperty 10 = DependencyProperty.RegisterAttached("Use", typeof(bool), typeof(AddInlineBehavior), 11 new PropertyMetadata(false, OnUseChanged)); 12 public static void SetUse(DependencyObject obj, bool value) => obj.SetValue(UseProperty, value); 13 public static bool GetUse(DependencyObject obj) => (bool)obj.GetValue(UseProperty); 14 private static void OnUseChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 15 { 16 if(d is TextBlock textBlock) 17 { 18 if((bool)e.NewValue) 19 { 20 var tmp = textBlock.Text; 21 textBlock.Inlines.Clear(); 22 if(GetBefore(textBlock) is Inline before) 23 { 24 textBlock.Inlines.Add(before); 25 textBlock.Inlines.Add(new Run(" ")); 26 } 27 textBlock.Inlines.Add(new Run(tmp)); 28 if(GetAfter(textBlock) is Inline after) 29 { 30 textBlock.Inlines.Add(new Run(" ")); 31 textBlock.Inlines.Add(after); 32 } 33 } 34 } 35 } 36 37 public static DependencyProperty BeforeProperty 38 = DependencyProperty.RegisterAttached("Before", typeof(Inline), typeof(AddInlineBehavior), 39 new PropertyMetadata(null)); 40 public static void SetBefore(DependencyObject obj, Inline value) => obj.SetValue(BeforeProperty, value); 41 public static Inline GetBefore(DependencyObject obj) => (Inline)obj.GetValue(BeforeProperty); 42 43 public static DependencyProperty AfterProperty 44 = DependencyProperty.RegisterAttached("After", typeof(Inline), typeof(AddInlineBehavior), 45 new PropertyMetadata(null)); 46 public static void SetAfter(DependencyObject obj, Inline value) => obj.SetValue(AfterProperty, value); 47 public static Inline GetAfter(DependencyObject obj) => (Inline)obj.GetValue(AfterProperty); 48 } 49}

アプリ画像

投稿2020/05/26 14:15

編集2023/07/22 07:06
TN8001

総合スコア9326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popaii

2020/05/27 03:29

ご回答ありがとうございます。 毎回非常に丁寧な回答をしていただき、とても感謝しております。 理想としては、添付ビヘイビアが近いのですが今回はテンプレートを参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問