2016-05-19 2 views
0

私はContainer.xamlでフォローコードを持っている:XAMLのユーザーコントロールにネストされた型を使用する方法は?

<UserControl x:Class="WpfLibraries.Container" 
     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" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<Border x:Name="Group" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CornerRadius="20" Background="White"> 
    <StackPanel Orientation="Vertical" Margin="5,0,5,5"> 
     <Border BorderBrush="Black" CornerRadius="10" HorizontalAlignment="Center" VerticalAlignment="Top" Width="auto" Height="auto" Background="{Binding Background, ElementName=Group}" BorderThickness="{Binding BorderThickness, ElementName=Group}" Margin="0,-20,0,0" > 
      <TextBlock VerticalAlignment="Center" Text="Group" FontSize="20" Margin="5"/> 
     </Border> 
     <StackPanel x:Name="ContentPanel" Orientation="Horizontal" Margin="0,10,0,0"/> 
    </StackPanel> 
</Border> 

私はこのようなスタックパネル「ContentPanel」にネスト種類を配置したいと思います:論理的に

<local:Container HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <local:Container.ContentPanel> 
    <!--More controls will be placed here--> 
    </local:Container.ContentPanel> 
</local:Container> 
+0

「ローカル」と同じように具体的になりますか? –

+0

@AbinMathew彼または彼女は、彼が現在書いているUserControlを同じUserControlに入れようとしています。 – Jai

答えて

1

あなたがここで達成しようとしている効果は完全にはっきりしていません。しかし、正しく理解すれば、UserControl自身のStackPanel"ContentPanel"という名前の子供を追加できますが、UserControlを使用するクライアントコードから子供を追加できます。それが正しいなら、その後、これを実現する最も簡単な方法は、単にUserControlにそのStackPanelChildrenプロパティを公開することです

class Container : UserControl 
{ 
    public UIElementCollection ContentPanelChildren 
    { 
     get { return this.ContentPanel.Children; } 
    } 

    ... 
} 

次にあなたがクライアントXAMLでパネルに子を追加したいです、パブリックプロパティは、のためx:Nameによって生成されたプライベートフィールドとは異なる名前を持っていなければならないことを、

<local:Container HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <local:Container.ContentPanelChildren> 
    <TextBlock Text="Sample child content"/> 
    <TextBlock Text="Other sample child content"/> 
    </local:Container.ContentPanelChildren> 
</local:Container> 

ノート、当然の:あなたは、ちょうどこのような何かを行うことができます要素。 "ContentPanel"の両方に名前を付けることはできません。


これが実際の質問に対処しない場合は、具体的にご記入ください。 Minimal, Complete, and Verifiable exampleには、達成しようとしていることを明確に示し、そのコードが何をしているのか、何をしたいのかを具体的に説明してください。

+0

これはまさに私がやりたいことです、ありがとうございます。 –

0

、私はしないでくださいあなたがこれを行うことができると思います。そこに無限ループを作成しています。全てContainerの物件がありますので、その中に子供Containerが入る予定です。それと全く同じ子供Containerオブジェクトはとなるでしょう。確かにには子供もいます。Containerです。それは純粋なコードに変換し、それがこれを書いてとほぼ同様である。

public void MyFunction() 
{ 
    this.MyFunction(); 
} 

あなたは一度MyFunction()を呼び出すと、あなたのプログラムが無限ループになるだろう。

関連する問題