2009-06-09 11 views
6

私はASPのために、この問題について何かを見つけたが、それは非常に私を助けていませんでした...C(それを使用している場合)、他のコントロールを含めることができます#ユーザーコントロール

は以下の通りです:コレクションとしてプロパティを持ち、このコレクションをナビゲートするボタンを持つユーザーコントロールを作成したいと思います。このユーザーコントロールをコレクションにバインドして、そのコレクションのデータを含むさまざまなコントロールを表示したいと考えています。より正確には

...あなたは、フォームの下縁部にMS Accessで持っていたものと同様 :

私は実際に自分のアプリケーションでコントロールを使用する場合(私はそれを作成した後)、私がしたいです<myControly></mycontrol> の間に複数のコントロール(テキストボックス、ラベルなど)を追加できるようになりました。これを行うと、ユーザーコントロールのコントロールが消えます。ここで

+2

いただきました問題以来、WPFの既存のコントロールであることを除いて受け入れ答えと同じことを行い、内蔵コントロールにlinkHeaderedContentControlは)ですか?これは非常に簡単ですね... – Tony

+0

問題はコレクションとナビゲーションボタンではなく、別のアプリケーションでコントロールを使用するときにコントロールをユーザーコントロールに追加できるようにすることです。 –

+0

との間に複数のコントロールを配置しようとすると、そこにコントロールを1つしか配置できないというエラーが発生します。グリッドを試すと、カスタムコントロールのコントロールが消えます。 –

答えて

8

は、あなたが欲しいものを行うための一つの方法の例です。

まず、コード - UserControl1.xaml.cs

public partial class UserControl1 : UserControl 
{ 
    public static readonly DependencyProperty MyContentProperty = 
     DependencyProperty.Register("MyContent", typeof(object), typeof(UserControl1)); 


    public UserControl1() 
    { 
     InitializeComponent(); 
    } 

    public object MyContent 
    { 
     get { return GetValue(MyContentProperty); } 
     set { SetValue(MyContentProperty, value); } 
    } 
} 

とユーザーコントロールのXAML - UserControl1.xaml

<Window x:Class="InCtrl.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:me="clr-namespace:InCtrl" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <me:UserControl1> 
      <me:UserControl1.MyContent> 
       <Button Content="Middle"/> 
      </me:UserControl1.MyContent> 
     </me:UserControl1> 
    </Grid> 
</Window> 
<UserControl x:Class="InCtrl.UserControl1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="300" Width="300" Name="MyCtrl"> 
    <StackPanel> 
     <Button Content="Up"/> 
     <ContentPresenter Content="{Binding ElementName=MyCtrl, Path=MyContent}"/> 
     <Button Content="Down"/> 
    </StackPanel> 
</UserControl> 

そして最後に、XAMLは、私たちの素晴らしい新しいコントロールを使用します

+0

@Nir +1 私はこの同じ解決策で遊んでいましたが、私はそれをうまく動作させることができませんでした。私はコンテンツプレゼンターのコンテンツプロパティにバインディングがありませんでした。 – JMarsch

+0

このスレッドもお試しください:http://stackoverflow.com/questions/1017421/access-like-data-navigation-in-wpf これは私が最終的に実装した解決策です。私が気付いたようにコントロールに他のコントロールが含まれている必要はありません。 –

0

UserControlがこれを行う最善の方法ではない場合があります。基本的にはBorderと同様に、コンテンツの周りに装飾を追加したいと思っています。それは子要素を持ち、エッジの周りに独自の要素を追加します。

Borderが降下するDecoratorクラスを調べます。あなた自身のボーダー子孫を作るなら、あなたはあなたが望むものを簡単に行うことができます。しかし、XAMLではなくコードを書く必要があると私は考えています。

ボタンの下を囲むようにUserControlを作成したい場合は、プロセスの一部としてビジュアルデザイナを使用することができます。しかし、デコレーターは、これらの部分を一緒に接着し、ユーザー定義可能なコンテンツを可能にする良い方法です。

1

私はあなたの質問を理解するのに苦労していますが、ItemsControlDataTemplatesを使用して(恐らく)ObservableCollection(T)の内容を表示しています。

+0

あなたの答えはより正確に私が必要としたものです(私は信じます)。しかし、Nirsの解決策は私が上で説明したものをより正確に行います。ただ一つの答えが可能なので、私は彼のことを尋ねた。しかし、私は現在、Itemsコントロールが何をすることができるかを評価しています。私はいくつかのカスタマイズを行っています。ありがとう! –

0

ここでは、.NET 3.0

関連する問題