2012-05-10 17 views
0

WPFでは、ItemsControl/Selectorのようなラベルを作成する方法は?コントロールはラベルのように見えますが、ItemsSourceプロパティからデータのコレクションをフィードし、DisplayMemberPathプロパティに従ってテキストを表示することができます。ユーザーは値を変更できません。表示専用です。ItemsControl/SelectorのようなWPFラベル

答えて

0

必要なのは、そのItemsPanel、このようなものとしてのStackPanelを使用してのItemsControlです:

XAML

<Grid> 
    <Grid.DataContext> 
     <local:TestViewModel/> 
    </Grid.DataContext> 
    <ItemsControl ItemsSource="{Binding Items}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding ItemText}" Margin=5/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 

それとも、DisplayMemberPathを使用したい場合は、

<Grid> 
    <Grid.DataContext> 
     <local:TestViewModel/> 
    </Grid.DataContext> 
    <ItemsControl ItemsSource="{Binding Items}" DisplayMemberPath="ItemText"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</Grid> 
を持つことができます

モデルを表示

public class TestViewModel 
{ 
    public TestViewModel() 
    { 
     Items = new List<TestItem> 
        { 
         new TestItem{ItemText = "One"}, 
         new TestItem{ItemText = "Two"}, 
         new TestItem{ItemText = "Three"}, 
        }; 
    } 
    public IEnumerable<TestItem> Items { get; set; } 
} 

public class TestItem 
{ 
    public string ItemText { get; set; } 
} 
テキストの単一選択項目を表示するための

簡単な(少しハック)ソリューションは、より良い解決策は、セレクタに基づいてカスタムコントロールを作成すること、および制御、鋳型になるだろう、リストボックス

<Grid> 
    <Grid.DataContext> 
     <local:TestViewModel/> 
    </Grid.DataContext> 
    <Grid.Resources> 
     <Style TargetType="ListBox"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListBox"> 
         <TextBlock Text= 
            "{Binding RelativeSource= 
            {RelativeSource Mode=TemplatedParent}, 
            Path=SelectedItem.ItemText}"/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Grid.Resources> 
    <ListBox Grid.Row="2" ItemsSource="{Binding Items}" SelectedIndex="2" /> 
</Grid> 

のスタイルです。

+0

SelectedItemのみを表示する必要がある場合はどうすればいいですか?コンボボックスと同様ですが、テキストブロックとして表示されます – linquize

関連する問題