2012-01-13 10 views
0

ItemsPanelTemplateの概念を理解しようとしています。このため私は小さなサンプルソリューションを構築しました。要素はItemsPanelTemplateで表示されません

私は次のコードでUserControl "MyListView"を持っています。

MyListView.xaml:MyListView.csで

<UserControl x:Class="WpfApplication2.MyListView" 
     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"> 
<UserControl.Resources> 
    <Style TargetType="ListViewItem"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListViewItem"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="Auto" /> 
         </Grid.RowDefinitions> 
         <Border BorderBrush="Black" BorderThickness="1" Margin="0" Padding="0" Width="100" Background="Gray"> 
          <TextBlock Text="Text" HorizontalAlignment="Center" /> 
         </Border> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 

<ListView ItemsSource="{Binding Path=TreeItemChildren}"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch"> 

      </StackPanel> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 
</UserControl> 

私はそれにデータをバインドするためのDependencyPropertyを追加しましたが表示されるはずです:

public partial class MyListView : UserControl 
{ 
    public MyListView() 
    { 
     this.TreeItemChildren = new ObservableCollection<string>(); 
     this.TreeItemChildren.Add("Text0"); 
     this.TreeItemChildren.Add("Text1"); 
     this.TreeItemChildren.Add("Text2"); 

     InitializeComponent(); 
    } 

    public ObservableCollection<string> TreeItemChildren 
    { 
     get { return (ObservableCollection<string>)GetValue(TreeItemChildrenProperty); } 
     set { SetValue(TreeItemChildrenProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for TreeItemChildren. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty TreeItemChildrenProperty = 
     DependencyProperty.Register("TreeItemChildren", typeof(ObservableCollection<string>), typeof(MainWindow), new UIPropertyMetadata(null)); 
} 

私は今、私の中でこのユーザーコントロールを使用しようとするとMainWindow、表示するデータがありません。その理由は何ですか?

答えて

0

コントロールテンプレートにboundのいずれかのListBoxItemプロパティがありません。そのため、Contentは表示されません。

通常はこれを置き換えます:

<TextBlock Text="Text" HorizontalAlignment="Center" /> 

で:

<ContentPresenter HorizontalAlignment="Center"/> 

また

(テンプレートコントロールはContentControlContentPresenterが自動的Content関連のプロパティにバインドされている場合) ListView.ItemsSourceDataContextのプロパティにバインドされます(これは設定されておらず、に設定しないでください。コントロールのインスタンス上のバインドに干渉するためです)、それをに変更してください。UserControl(例: ElementNameまたはRelativeSourceを使用してください)。

ItemsSourceバインディングによってバインドエラーが発生する可能性があります。how to debug themを参照してください)

関連する問題