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

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

0回答

375閲覧

XamlのStyleを再帰的に使用したい

Y...M

総合スコア18

XAML

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

WPF

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

0グッド

0クリップ

投稿2020/06/03 02:23

前提・実現したいこと

XamlのStyleを再帰的に使用したい。

以下のXamlのように、hogeスタイルを再帰的に使用したい場合、
実現手段はございますでしょうか?

また、Style以外で実現する手段はございますでしょうか。

MainWindow.xamlでバインドしているList1 ・・・ ObservableCollection<Item> List1
Dictionary1.XamlでバインドしているNestList1 ・・・ Itemクラス内に定義したObservableCollection<Item> NestList1

ItemクラスがObservableCollection<Item>を持っており、
条件(今回はFlagがtrue)によって、再帰的に構造を持ちます。

該当のソースコード

Xaml

1MainWindow.xaml 抜粋 2 <ResourceDictionary Source="Dictionary1.xaml"/> 3 4 <ItemsControl 5 Name="Items" 6 ItemsSource="{Binding List1}" 7 Background="Transparent" 8 FocusVisualStyle="{x:Null}"> 9 <ItemsControl.ItemsPanel> 10 <ItemsPanelTemplate> 11 <Canvas x:Name="canvas"/> 12 </ItemsPanelTemplate> 13 </ItemsControl.ItemsPanel> 14 <ItemsControl.ItemTemplate> 15 <DataTemplate> 16 <ContentControl 17 IsHitTestVisible="False" 18 Width="{Binding Width}" 19 Height="{Binding Height}" 20 Style="{StaticResource hoge}"/> 21 </DataTemplate> 22 </ItemsControl.ItemTemplate> 23 <ItemsControl.ItemContainerStyle> 24 <Style> 25 <Setter Property="Canvas.Top" Value="{Binding Y}" /> 26 <Setter Property="Canvas.Left" Value="{Binding X}" /> 27 </Style> 28 </ItemsControl.ItemContainerStyle> 29 </ItemsControl> 30

Xaml

1Dictionary1.xaml 抜粋 2 <Style x:Key="hoge" TargetType="Control"> 3 <Style.Triggers> 4 <DataTrigger Value="false" Binding="{Binding Flag}"> 5 <Setter Property="Template"> 6 <Setter.Value> 7 <ControlTemplate> 8 <Rectangle Fill="Red"/> 9 </ControlTemplate> 10 </Setter.Value> 11 </Setter> 12 </DataTrigger> 13 <DataTrigger Value="true" Binding="{Binding Flag}"> 14 <Setter Property="Template"> 15 <Setter.Value> 16 <ControlTemplate> 17 <ItemsControl 18 Name="nestitems" 19 ItemsSource="{Binding NestList1}" 20 VerticalAlignment="Stretch" 21 HorizontalAlignment="Stretch" 22 Background="Transparent" 23 FocusVisualStyle="{x:Null}"> 24 <ItemsControl.ItemsPanel> 25 <ItemsPanelTemplate> 26 <Canvas x:Name="canvas"/> 27 </ItemsPanelTemplate> 28 </ItemsControl.ItemsPanel> 29 <ItemsControl.ItemTemplate> 30 <DataTemplate> 31 <ContentControl 32 IsHitTestVisible="False" 33 Width="{Binding Width}" 34 Height="{Binding Height}" 35 Style="{StaticResource hoge}"/> 36 </DataTemplate> 37 </ItemsControl.ItemTemplate> 38 <ItemsControl.ItemContainerStyle> 39 <Style> 40 <Setter Property="Canvas.Top" Value="{Binding Y}" /> 41 <Setter Property="Canvas.Left" Value="{Binding X}" /> 42 </Style> 43 </ItemsControl.ItemContainerStyle> 44 </ItemsControl> 45 </ControlTemplate> 46 </Setter.Value> 47 </Setter> 48 </DataTrigger> 49 </Style.Triggers> 50 </Style>

エラー

Exception: 'hoge' という名前のリソースが見つかりません。リソース名は大文字と小文字を区別します。

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

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

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

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

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

TN8001

2020/06/03 08:59

Style="{DynamicResource hoge}" とするとエラー自体は消えます(意図通り動くかはわかりません) xamlで再帰的というとHierarchicalDataTemplateがすぐ思い浮かびますが、Y...Mさんのやりたいこととマッチしているかはちょっとわからないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問