前提・実現したいこと
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' という名前のリソースが見つかりません。リソース名は大文字と小文字を区別します。
あなたの回答
tips
プレビュー