ラップパネルの動作とサイズ変更可能なコントロールでグリッドを作成したいのですが、どうすればいいですか? 多分それは私がイメージして欲しいものを表示するように簡単です:WPFでサイズ変更可能なコントロールを備えたグリッドライクなWrapPanel
初期状態:
それはように、2x2のセルの周囲に取り、その後2を制御しますので、方向右下と制御1のサイズを変更しますグリッド上での位置を再配置します:それはバックリサイズだとき
をそれが戻って初期状態にする必要があります。
ラップパネルの動作とサイズ変更可能なコントロールでグリッドを作成したいのですが、どうすればいいですか? 多分それは私がイメージして欲しいものを表示するように簡単です:WPFでサイズ変更可能なコントロールを備えたグリッドライクなWrapPanel
初期状態:
それはように、2x2のセルの周囲に取り、その後2を制御しますので、方向右下と制御1のサイズを変更しますグリッド上での位置を再配置します:それはバックリサイズだとき
をそれが戻って初期状態にする必要があります。
アニメーションを作成するには、Panel
の拡張クラスを作成するだけです。アニメーションを作成する方法についてはvery good articleですWrapPanel
次に、Trigger
を使用してそれぞれのアイテムを伸縮させるアイテムに対して、DataTemplate
を作成する必要があります。これはTrigger
でアニメ化することもできます。 Panel
は、Panel.ArrangeOverride
メソッドに設定したコードに応じて、アイテムがサイズを変更すると自動的に他のアイテムを移動します。
アイテム(四角形)として使用するデータ型(クラス)を作成する必要があります。このクラスは、ボックス番号を格納する文字列プロパティと、それを大きく表示するかどうかをUIに知らせるためにbool
IsLarge
プロパティが必要です。私は実際にこのコードを試していないが、しかし、あなたにはこのようなものを使用することができ、あなたのDataTemplate
:私は定義していない
<Style TargetType="{x:Type ListBoxItem}" x:Key="BoxStyle">
<Setter Property="ContentTemplate" Value="{StaticResource BoxTemplate}" />
<Style.Resources><!-- this removes the default blue selection colour -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#00FFFAB0" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#00FFFAB0" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
</Style.Resources>
<Style.Triggers><!-- comment this section out, or declare a SelectedBoxTemplate DataTemplate -->
<Trigger Property="IsSelected" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource SelectedBoxTemplate}" />
</Trigger>
</Style.Triggers>
</Style>
:
<DataTemplate DataType="{x:Type YourXmlNameSpace:YourDataType}" x:Key="BoxTemplate">
<Border Name="Border" BorderBrush="Black" BorderThickness="1" CornerRadius="3" Height="100" Width="100">
<TextBlock Text="{Binding YourTextProperty}" />
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsLarge}" Value="True"><!-- (A Boolean property) -->
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="Height" From="100" To="200" Duration="0:0:0.5" />
<DoubleAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="Width" From="100" To="200" Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="Height" From="200" To="100" Duration="0:0:0.5" />
<DoubleAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="Width" From="200" To="100" Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
は、その後、あなたがこのような各
ListBoxItem
で
DataTemplate
を関連付けます任意の
SelectedBoxTemplate
DataTemplate
ですが、
Style.Trigger
を使用して有効になる別のものを宣言することができます。
最後に、あなたはこのようなあなたのListBox
何か宣言します次に:グリッド内の応答のための
<ListBox ItemsSource="{Binding YourCollection}" ItemContainerStyle="{StaticResource BoxStyle}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<YourXmlNameSpace:YourAnimationPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
おかげで、実際にコントロール(あなたがIsLarge性を有する示唆1)のUIがあるので、手動でサイズ変更可能です非常にインタラクティブなので、私たちは自分自身をアニメーション化するため、データ型のアニメーションを作成しません。私は、サイズ変更可能なコントロールを作成しようとしたが、私はどのようにラッパー(カスタムパネルで述べた)を実装するためのアイデアを持っていない – dnr3
私はこれを行う方法を示す非常に良い記事へのリンクを提供した...あなたがしなければならないすべて'Panel.MeasureOverride'と' Panel.ArrangeOverride'メソッドのコードを少し調整しています。あなたのコードは、少し複雑になりますが、コードの例に非常に似ているはずです。この例のコードでは、最大の 'child.DesiredSize.Height'を使って各行の高さを決定していますが、大きな行を1つずつ持つ2つの小さなボックスを各行に配置できるようにするには、ここでさらに行う必要があります。 – Sheridan