2012-03-21 6 views
3

テキストボックスのようなユーザーコントロールを作成するにはどうすればよいですか?たとえば、テキストボックスコントロールのTextプロパティを変更すると、現在作業しているウィンドウに新しいテキストが表示されます。usercontrolにプロパティをアタッチしてデザイン時に更新する

私のプロジェクトでは、ユーザーが情報を入力する場所がたくさんあるため、InputFieldユーザーコントロールを作成したいと考えています。

<UserControl x:Class="PDV.UserControls.InputField" 
     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" > 
    <Grid> 
     <StackPanel> 
      <Label Content="{Binding Path=LblContent}" HorizontalAlignment="Left" VerticalAlignment="Top" /> 
      <TextBox Height="23" Margin="5,-5,2,2" Name="textBox1" VerticalAlignment="Top" /> 
     </StackPanel> 
    </Grid> 
</UserControl> 

とそのユーザーコントロールの背後にあるコード:

namespace PDV.UserControls 
{ 
    public partial class InputField : UserControl 
    { 
     public static DependencyProperty MessageProperty = DependencyProperty.Register(
      "LblContent", typeof(string), typeof(UserControl)); 

     public string LblContent{ 
      get{ 
       return (string)GetValue(MessageProperty); 
      } 
      set{ 
       SetValue(MessageProperty, value); 
      } 
     } 

     //Constructor 
     public InputField(){ 
      InitializeComponent(); 
      this.DataContext = this; 
     } 
    } 
} 

ここ

は私のユーザーコントロールのXAMLである(つまり、ユーザーコントロールは、ラベルのカスタムスタイルを持つテキストボックスで構成します)私のメインウィンドウでは、そのユーザコントロールを次のように使用することができます:

1)そのユーザコントロールがある場所の名前空間をインポートする:

xmlns:myCtrl ="clr-namespace:PDV.UserControls" 

2)そのウィンドウにそのコントロールを配置する:

<myCtrl:InputField LblContent="hello" Margin="0,0,483,0" Height="49" VerticalAlignment="Top"></myCtrl:InputField> 

私はLblContent="hello"を更新するとき、それは、ウィンドウ上でレンダリングすることをそうするように何がありますか?それはデザイン時にレンダリングすることがないだけで、ランタイム

+0

ラベルとテキストボックスのカスタムコントロールが必要です。ラベルとテキストボックスにスタイルを適用できます。ラベルはデザイン時にレンダリングされます。 TextBoxをバインドする構文を追加する頃には、多くのキーストロークを保存しておらず、それに従うのが難しいビューコードも保存しています。 – Paparazzi

+0

うん、私はそれを理解しようとしていた。ラベルとtextoxはスタックパネルの内側にある必要があります。私は、スタックパネルのスタイルを作成して、ラベルやスタックパネルのテキストボックスのスタイルを作成するのではなく、子どもが特定のスタイルを持つようにする方法を見つけようとしていました。新しい入力フィールドが必要になるたびに、ユーザーコントロールをドラッグするだけでなく、3つのコントロールを配置する必要がありました。 –

答えて

1

で、私は第二のタイプは、 のpublic staticたDependencyProperty MessageProperty = DependencyProperty.Register( 「LblContent」、typeof演算(文字列)を入力フィールドかもしれないと考えていいだろうtypeof(InputField));

私は決してあなたの方法でDataContextを設定しようとしないで、最終的にはusercontrol x:Name = "Root"で名前をつけようとしましたが、このようにバインディングを変更してください:Content = "{Binding Path = LblContent、ElementName = Root } "

+0

なぜあなたはそれが役に立った答えを削除しましたか?ありがとう –

+0

あなたはdatacontextを別の方法で管理しているのを見ましたが、私は新しい投稿に同じコメントを挿入しました。はい、私はそれがあなたが正しい編集することができます – pluka

関連する問題