まだWPFをいじくり回して、学習しながら進んでいます。コントロールの動的なグループ化を構築しようとしています(主にボタンですが、チェックボックスなどが含まれる場合があります)。
これを行うための最良の方法がわからなかったので、ItemsControlスタイルを作成してから、WrapPanel内のItemsPresenterにアイテムを追加してみました。すぐに、ItemsHostとして配置しない限り、アイテムがWrapPanel内に効果的に含まれていなかったため、アイテムがラップされないことに気付きました。このような:
<Style x:Key="ButtonPanelGroup" TargetType="{x:Type ItemsControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<Border CornerRadius="5"
BorderBrush="{StaticResource DarkColorBrush}"
BorderThickness="1"
Margin="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<WrapPanel IsItemsHost="True" FlowDirection="LeftToRight">
<ItemsPresenter />
</WrapPanel>
<ContentPresenter ContentSource="Name" Grid.Row="1" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
これは進行中の作業であり、まだ実装する必要のある多くのスタイリング効果があることに注意してください。ここで私はそれを使用します:
<UniformGrid Rows="1">
<ItemsControl Name="Group1" Style="{StaticResource ButtonPanelGroup}">
<Button>Button1</Button>
<Button>Button2</Button>
<CheckBox>TickBox</CheckBox>
</ItemsControl>
<ItemsControl Name="Group2" Style="{StaticResource ButtonPanelGroup}">
<Button>Button3</Button>
<Button>Button4</Button>
<Button>Button5</Button>
</ItemsControl>
<ItemsControl Name="Group3" Style="{StaticResource ButtonPanelGroup}">
<Button>Button6</Button>
<Button>Button7</Button>
<Button>Button8</Button>
</ItemsControl>
</UniformGrid>
また、UniformGridはここに行く方法ではなく、マージンが苦痛になる可能性があるため(重複するマージンはありますか?)、まだ作業中であることに注意してください。そこで入力していただければ幸いです。
さて、本当の問題に。これは機能しませんエラーが発生します:
「ItemsPresenter」オブジェクトを「WrapPanel」に追加することはできません。ItemsControlのItemsPanelとして使用されるPanelのChildrenコレクションを明示的に変更することはできません。ItemsControlは、Panelの子要素を生成します。オブジェクト'System.Windows.Controls.ItemsPresenter'でエラーが発生しました。
したがって、このようなことを行うための最良の方法は何ですか(ボタンやその他のコントロールをItemControlにスローして、本当に素晴らしいものに並べることができるようにしたいと思います)。コントロールをある種のコレクションに入れて反復する方がよいでしょうか。
それをうまくやりたいのですが、私のWPFスキルはまだ不足しています。基本を超えて教え、プロが実際にそれをどのように行うかを示すWPFの本はありますか?