1

wpf のヘルプが必要です。私が基本的にやりたいことは、2つの画像とテキストボックスを含むItemsControlsのコレクション(データバインディングから)でエキスパンダーを埋めることです。期待した結果が得られませんでした。誰かが私を助けてくれますか?

ここに私のXAMLがあります:

<Expander Name="OnlineExpander"
          HorizontalAlignment="Stretch"
          Header="Online Friends"
          IsExpanded="True">
  <Expander.Content>
    <Grid>
      <ItemsControl Height="50"
                    VerticalAlignment="Top">
        <ItemsControl.ItemTemplate>
          <DataTemplate>
            <Grid Height="30"
                  VerticalAlignment="Top"
                  Background="Brown"
                  Name="itemGridTemp">
              <Grid.ColumnDefinitions>
                <ColumnDefinition Width="61*"
                                  Name="PictureColumn" />
                <ColumnDefinition Width="271*"
                                  Name="NameColumn" />
                <ColumnDefinition Width="33*"
                                  Name="StatusColumn" />
              </Grid.ColumnDefinitions>
              <Image Height="30"
                     Width="30"
                     Source="{Binding Path=Image}"
                     Grid.ColumnSpan="1"
                     MouseEnter="Image_MouseEnter"></Image>
              <TextBox Name="txtName"
                       Grid.ColumnSpan="2"
                       Text="{Binding Name}"
                       Width="271"
                       Foreground="#FFEEB8B8"></TextBox>
            </Grid>
          </DataTemplate>
        </ItemsControl.ItemTemplate>
      </ItemsControl>
    </Grid>
  </Expander.Content>
</Expander>

および分離コード:

private List<Friend> _Friends;
public List<Friend> Friends { get { return _Friends; } }
private void Window_Loaded(object sender, RoutedEventArgs e) {
  Image img = new Image();
  img.RenderSize = new Size(30, 30);
  img.OpacityMask = Brushes.CadetBlue;
  _Friends = new List<Friend> {
            new Friend{Name="John Smith",IsOnline=true,Image=img},
            new Friend{Name="Name Surname",IsOnline=true,Image=img},
            new Friend{Name="Name2 surname2", IsOnline=false,Image=img}
            };
  OnlineExpander.DataContext = Friends;
}

と呼ばれるクラスがありFriendます:

public class Friend {
  private Image _Image;
  private String _Name;
  private bool _IsOnline;

  public Image Image { get { return _Image; } set { _Image = value; } }
  public string Name { get { return _Name; } set { _Name = value; } }
  public bool IsOnline { get { return _IsOnline; } set { _IsOnline = value; } }
}

誰かが私を助けてくれることを願っています。私の悪い英語でごめんなさい;)

4

2 に答える 2

2

ItemsControl に ItemsSource を次のように設定します。

      <ItemsControl Height="50" VerticalAlignment="Top" ItemsSource="{Binding}">

これにより、アイテムが生成されます

于 2013-10-10T13:36:39.210 に答える
1

あなたの ItemsControl は、それが持っているアイテムを知る必要があります。(分離コードまたはマークアップで) ItemsSource を設定しない限り、これは行われません。代わりにこれを試してください:

XAML (ItemsControl に名前が付けられました):

<Expander Name="OnlineExpander"
          HorizontalAlignment="Stretch"
          Header="Online Friends"
          IsExpanded="True">
  <Expander.Content>
    <Grid>
      <ItemsControl Height="50"
                    VerticalAlignment="Top"
                    Name="OnlineItemsControl">
        <ItemsControl.ItemTemplate>
          <DataTemplate>
            <Grid Height="30"
                  VerticalAlignment="Top"
                  Background="Brown"
                  Name="itemGridTemp">
              <Grid.ColumnDefinitions>
                <ColumnDefinition Width="61*"
                                  Name="PictureColumn" />
                <ColumnDefinition Width="271*"
                                  Name="NameColumn" />
                <ColumnDefinition Width="33*"
                                  Name="StatusColumn" />
              </Grid.ColumnDefinitions>
              <Image Height="30"
                     Width="30"
                     Source="{Binding Path=Image}"
                     Grid.ColumnSpan="1"
                     MouseEnter="Image_MouseEnter"></Image>
              <TextBox Name="txtName"
                       Grid.ColumnSpan="2"
                       Text="{Binding Name}"
                       Width="271"
                       Foreground="#FFEEB8B8"></TextBox>
            </Grid>
          </DataTemplate>
        </ItemsControl.ItemTemplate>
      </ItemsControl>
    </Grid>
  </Expander.Content>
</Expander>

Codebehind (ItemsSource が に設定されてい_Friendsます):

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    Image img = new Image();
    img.RenderSize = new Size(30,30);
    img.OpacityMask = Brushes.CadetBlue;
    _Friends = new List<Friend> {
        new Friend{Name="John Smith", IsOnline=true, Image=img},
        new Friend{Name="Name Surname", IsOnline=true, Image=img},
        new Friend{Name="Name2 surname2", IsOnline=false, Image=img}
    };
    OnlineItemsControl.ItemsSource = _Friends;
}
于 2013-10-10T13:47:36.770 に答える