2011-07-17 5 views
0

私はを使ってグリッドを表示します。 ListBoxに基づいて(派生した)いくつかのクラスを作成し、この派生クラスのItemTemplateを変更したいと考えています。ListBoxをベースクラスとして使用するにはどうすればよいですか?

どうすればいいですか?

UserControlクラスから派生したクラスを定義し、派生クラスをUserControlクラスの隣のListBoxに変更しようとしましたが、これは機能しません。

他の方法はありますか?

ListBoxのように、ListBoxListBoxItemテンプレートを変更する必要があります。単純なシルバーライトページに追加します。

ありがとうございました。

public class MyListBox : ListBox 
{ 
    public MyListBox() 
    { 
     this.DefaultStyleKey = typeof(MyListBox); 
    } 
} 

あなたがテンプレートコントロールを作成すると、それはされます:あなたは、リストボックスから派生whcich -

答えて

1

何を行うことができますするテンプレートコントロールを作成することです(新しい項目]メニューを使用すると、簡単に視覚的なスタジオを経由して1を作成することができます)また、Themesというフォルダを作成し、スタイルが定義されているgeneric.xamlを作成します。その後 リストボックス取る - hereからスタイルをしてコピーし、正しい位置(あなたも、ValidationTooltipTemplateを必要とする)であなたのgeneric.xamlに貼り付け:それは同じで、あなたにItemTemplateに定義した後、

<Style TargetType="local:MyListBox"> 
     <Setter Property="Padding" Value="1"/> 
     <Setter Property="Background" Value="#FFFFFFFF" /> 
     <Setter Property="Foreground" Value="#FF000000"/> 
     <Setter Property="HorizontalContentAlignment" Value="Left" /> 
     <Setter Property="VerticalContentAlignment" Value="Top" /> 
     <Setter Property="IsTabStop" Value="False" /> 
     <Setter Property="BorderThickness" Value="1" /> 
     <Setter Property="TabNavigation" Value="Once" /> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="BorderBrush"> ... 

[OK]をXAML:

<DataTemplate x:Key="MyItemTemplate"> 

とあなたのリストボックススタイルのセッターリストに追加します。

<Style TargetType="local:MyListBox"> 
     <Setter Property="ItemTemplate" Value="{StaticResource MyItemTemplate}"/>^ 

これがデフォルトのテンプレートです。

しかし、あなたがそれを継承したいので、ListBoxに特定の動作を追加する必要がありますか?特定のアイテムテンプレートを追加したいだけなら、ListBoxから派生することはお勧めできません(実際、DataTemplateは一般的ではなく、常にDataTypeに固有です)。特定の動作を追加しない場合は、グローバルDataTemplate(app.xamlで定義されている可能性があります)を作成し、必要なときにDataTemplateとして参照するか、このDataTemplateで特定のスタイルを作成してスタイルを設定します共通のListBox。

質問がある場合は、コメントを残してください。

希望すると便利です。

BR、

ドイトするTJ

1

その他の方法で、あなたはあなたのコントロールがリストボックスとしてデフォルトで見えることしたい場合。 ListBoxから派生したクラスを作成し、既定のコンストラクターでDefaultStyleKeyを変更します。

public class MyListBox : ListBox 
{ 
    public MyListBox() 
    { 
     // the control would look like a listBox by default 
     DefaultStyleKey = typeof (ListBox); 
    } 

    (...) 
} 
関連する問題