2016-08-30 4 views
0

こんにちは、stackoverflowers。動的にユーザーコントロールを追加する

私は動的にいくつかの要素を画面に表示したいと思います。私は、OverlayElement基本クラスといくつかの子クラスを持っています。 OverlayElement基本クラスには、私のOverlayElementを描画する方法を定義する小さなusercontrolに対応するFrameworkElementが含まれています。

私は、ViewのItemcontrolにバインドされたOverlayElementsのコレクションを含むOverlayViewModelを持っています。

ここに、OverlayElementと子の抜粋があります。ここで

public abstract class OverlayElement : INotifyPropertyChanged 
{ 
    public UserControl View; 
} 


public class ImageOverlayElement : OverlayElement 
{ 
    public ImageOverlayElement(Point start, Point end) 
    { 
     View = new ImageOverlayElementView(); 
    } 
} 

はImageOverlayElementView

<UserControl x:Class="Client.ImageOverlayElementView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Client" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      d:DataContext="{d:DesignInstance local:ImageOverlayElement}"> 
    <Grid> 
      <Image 
       Source="{Binding ImageSource}" 
       Height="{Binding Height}" 
       Width="{Binding Width}"/> 
    </Grid> 
</UserControl> 

のexempleであり、これは、私はこれらの要素を使用しようとする方法です。私の問題は、私は(子クラスで初期化)OverlayElementからの私のUserControlビューを挿入する方法がわからないということです。

<ItemsControl 
     ItemsSource="{Binding OverlayElementsList}" 
     Background="Transparent"> 

<ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <Canvas/> 
     </ItemsPanelTemplate> 
</ItemsControl.ItemsPanel> 

<ItemsControl.Resources> 

    <DataTemplate DataType="{x:Type elements:OverlayElement}"> 
     <!-- Need help for here, how can I insert my UserControl View from OverlayElement ? (initialized in the child class) --> 
    </DataTemplate> 

</ItemsControl.Resources> 
</ItemsControl> 
+0

'public abstract class OverlayElement:INotifyPropertyChanged {public UserControl View; } 'nope。 – Will

答えて

1

あなたは単にContentControlでビューを置くことができます。

<DataTemplate DataType="{x:Type local:OverlayElement}"> 
    <ContentControl Content="{Binding View}" /> 
</DataTemplate> 
をしかし作ります Viewがプロパティです。それ以外の場合は、データバインドでは機能しません。

+0

それは完璧に動作します、ありがとう:) – Csi

+0

@ CSI、喜んでそれは、歓声を助けた! =) – icebat

関連する問題