ItemsControlを使用してContentsControlをホストするのが好きです。それぞれの新しいContentsControlは、アイテムが追加され、それぞれのContentControlが前のコンテンツコントロールをオーバーレイすると、そのコンテンツをアニメートします。 ItemsControlとContentControlのコンテンツは、命名規則を使用してCaliburn Microにバインドされています。ItemsControlでContentControlをアニメーション化する方法
<ItemsControl x:Name="OverlayStackedItems" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Transparent">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid x:Name="ItemsHost" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<cc:DummyContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
ContentControlには、このように定義されています
[ContentProperty("Content")]
public partial class DummyContentControl :ContentControl
{
public DummyContentControl()
{
}
static DummyContentControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(DummyContentControl), new FrameworkPropertyMetadata(typeof(ContentControl)));
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
}
protected override void OnContentChanged(object oldContent, object newContent)
{
LayoutUpdated += (sender, e) =>
{
};
UpdateLayout();
base.OnContentChanged(oldContent, newContent);
}
void DummyContentControl_LayoutUpdated(object sender, EventArgs e)
{
throw new NotImplementedException();
}
protected override Size MeasureOverride(Size constraint)
{
return base.MeasureOverride(constraint);
}
}
だから今、ようやく私の質問。実際のContentControlではコンテンツをアニメーション化するのが好きですが、 OnContentChangeが呼び出されてアニメーションが作成されると、ContentControlのサイズは0になります。 ContentControlにはItemsControlにでホストされている呼の順序がある:OnContentChanged
- (アニメーションfailes)
- OnApplyTemplate
- MeasureOverride
ContentControlには、順序はそれ自体で実行されます。
- オンアプライテンプレート
- MeasureOverride
- OnContentChanged(アニメーション作品)
ここでの問題は、ItemsControlの中に新しい項目の完全な視覚的な部分木が0であること(DesiredSizeを、ActualSize = 0)ので、私のアニメーションのコードが失敗しています。 誰かに何か意味があることを願っています。 何か助けがあれば、Thx、J
-------------------------- ---- Revision -------------------
私はOnLoadedイベントハンドラをDummyControlのctorに追加しました。 OnContentChanged(すべてのサイズは0) 2. OnApplyTemplate(すべてのサイズは0) 3. MeasureOverride(ContentControlによってすべての子コントロールホストセットに対しておそらく数回呼び出される) 4.ロードされたイベント他のすべてのサイズはまだ設定されています0)
ItemsControlによってContentControl ホストセットをアニメーション化する方法については、どのような推奨がありますか?
アニメーションを処理する前にダミーコントロールが読み込まれていることを確認しましたか?読み込まれていない場合は、アニメーションを遅らせる必要があります。 – BladeWise