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

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

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

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

Q&A

解決済

1回答

8286閲覧

ItemsControl に数種類のコントロールを定義して選択したい。

mugicya

総合スコア1046

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

0グッド

0クリップ

投稿2016/12/24 15:35

お世話になります。

現在、Thumbコントロールを使用してドラッグできるコントロールを作っているのですが、
<ItemsControl.ItemTemplate> に、複数のコントロールを定義し、選択して表示したい。
現在はラベルを定義していますが、テキストボックスだとかコンボボックス等、複数のコントロールを
定義できるのでしょうか?または、良い方法があれば、ご教示ください。

宜しくお願いします。

XAML

1 2 <ItemsControl x:Name="DragList" ItemsSource="{Binding}" Grid.Column="0"> 3 4 <!--コレクション項目をどのようにレイアウトするかを決定します--> 5 <ItemsControl.ItemsPanel> 6 <ItemsPanelTemplate> 7 <Canvas/> 8 </ItemsPanelTemplate> 9 </ItemsControl.ItemsPanel> 10 11 <!--コンテナーの動作定義--> 12 <!--親ContentPresenterの位置をバインディング設定する--> 13 <ItemsControl.ItemContainerStyle> 14 <Style TargetType="{x:Type ContentPresenter}"> 15 <Setter Property="Canvas.Left" Value="{Binding X}"/> 16 <Setter Property="Canvas.Top" Value="{Binding Y}"/> 17 18 <Style.Triggers> 19 <Trigger Property="IsMouseOver" Value="True"> 20 <Setter Property="Panel.ZIndex" Value="1"/> 21 </Trigger> 22 <Trigger Property="IsMouseOver" Value="False"> 23 <Setter Property="Panel.ZIndex" Value="0"/> 24 </Trigger> 25 26 </Style.Triggers> 27 </Style> 28 </ItemsControl.ItemContainerStyle> 29 30 <!--コンテナーのデータオブジェクト--> 31 <ItemsControl.ItemTemplate> 32 <DataTemplate> 33 <Thumb DragDelta="Thumb_DragDelta" > 34 <Thumb.Template> 35 <ControlTemplate TargetType="{x:Type Thumb}"> 36 <Label Width="150" Height="150" FontFamily="Meiryo" MouseDown="Label_MouseDown" MouseEnter="Label_MouseEnter" BorderThickness="3" MouseLeave="Label_MouseLeave"> 37 <Label.Background> 38 <ImageBrush ImageSource="Resources/Image/Test.png"/> 39 </Label.Background> 40 </Label> 41 </ControlTemplate> 42 </Thumb.Template> 43 </Thumb> 44 </DataTemplate> 45 </ItemsControl.ItemTemplate> 46 47 </ItemsControl> 48

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

可能です。
ControlTemplateの中にGridStackPanelなどのレイアウトコントロールを配置し、その中に自由に配置すれば良いだけです。


複数のコントロールを定義し、選択して表示したい

ここについて見落としました。
どういう要件でしたか。


XML

1<ItemsControl> 2 <ItemsControl.ItemTemplate> 3 <DataTemplate> 4 <Thumb DragDelta="Thumb_DragDelta"> 5 <Thumb.Style> 6 <Style TargetType="Thumb"> 7 <Style.Triggers> 8 <DataTrigger Binding="{Binding ctrlType}" Value="0"> 9 <Setter Property="Template" Value="{StaticResource LabelTemplate}" /> 10 </DataTrigger> 11 <DataTrigger Binding="{Binding ctrlType}" Value="1"> 12 <Setter Property="Template" Value="{StaticResource ComboBoxTemplate}" /> 13 </DataTrigger> 14 </Style.Triggers> 15 </Style> 16 </Thumb.Style> 17 </Thumb> 18 </DataTemplate> 19 </ItemsControl.ItemTemplate> 20</ItemsControl>

投稿2016/12/24 16:00

編集2016/12/24 16:23
Tak1wa

総合スコア4791

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

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

mugicya

2016/12/24 16:11

ObservableCollection<ViewModel> ViewModels1; ViewModel というクラスをリストに登録して Canvas 上に表示しています。 このクラスに、ctrlType 等のプロパティを持たせて、その値を設定してコレクションに Addして 表示するコントロールを変更するような仕組みを目指しています。 ctrlTypeは、 0:Label 1:ComboBox . . というような感じで定義できれば良いな、と思っています。
mugicya

2016/12/24 16:15

ControlTemplate自体をResourceに定義してそれを選択…うーん、まだよく解ってない…
Tak1wa

2016/12/24 16:19

定義はどこに定義してもいいですが、ControlTemplateを切り替える方針で良いと思います。 切替にはDataTriggerを使ってみてはどうでしょう。 コード例を追記してみました。
mugicya

2016/12/24 16:25

この方向でいけそうです!ありがとうございました!
mugicya

2016/12/24 17:02

うまく行きました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問