2

一部のユーザーを画像に登録できるアプリケーションを作成しました。それらを一覧表示するには、画像を 内に表示しListBoxます。この画像に示すように、各ユーザー画像をクリックして選択できます。

ここに画像の説明を入力

これListBoxは私自身を使用していTemplateます:

<Style TargetType="ListBox" x:Key="TiledListBox">
    <Setter Property="Margin" Value="0,0,10,0"></Setter>
    <Setter Property="Padding" Value="1"/>
    <Setter Property="Background" Value="White" />
    <Setter Property="HorizontalContentAlignment" Value="Left" />
    <Setter Property="VerticalContentAlignment" Value="Top" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <WrapPanel Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}}}" />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel Orientation="Vertical" Width="80">
                    <Image Source="{Binding Path=Picture}" Width="80" Height="80"></Image>
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

ListBoxXAML: _

<ListBox Name="ListBoxUsers" ItemsSource="{Binding Path=ListObservableUsers, ElementName=SelectUser}" Style="{DynamicResource TiledListBox}" 
                 ScrollViewer.HorizontalScrollBarVisibility="Hidden" MouseDoubleClick="ListBoxUsers_MouseDoubleClick" />

コード ビハインドはListBoxObservableCollection.

ここで問題が発生します。最初のユーザーとは異なるユーザーをクリックしようとすると、次の図に示すように、複数のユーザーが選択されます。

ここに画像の説明を入力

なぜそれが起こっているのかについて何か考えはありますか?

別のコードで同じコードを使用していて、Window完全に機能していると言わざるを得ませんが、それらの間に違いは見られません...

編集:このコードビハインドを使用して、例を機能させることができます。

 public partial class MainWindow
{
    public ObservableCollection<DtoObject> ListObservableUsers { get; set; } 
    public MainWindow()
    {
        ListObservableUsers = new ObservableCollection<DtoObject>();
        InitializeComponent();

        Image image = new Image {Source = Extensions.LoadBitmap(new Bitmap(Properties.Resources.vaca))};
        for (int i = 0; i < 4; i++)
        {
            DtoObject dtoObject = new DtoObject {Picture = image};
            ListObservableUsers.Add(dtoObject);
        }
    }
}

public static class Extensions
{
    public static BitmapSource LoadBitmap(Bitmap source)
    {
        IntPtr ip = source.GetHbitmap();
        BitmapSource bs = null;
        bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip,
        IntPtr.Zero, Int32Rect.Empty,
        BitmapSizeOptions.FromEmptyOptions());

        return bs;
    }
}

public class DtoObject
{
    public Image Picture { get; set; }
}

private void ListBoxUsers_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    AcceptUser();
}    

private void AcceptUser()
    {
        if (ListBoxUsers.SelectedIndex < 0) return;

        selectedUser = (DtoObject)ListBoxUsers.SelectedItem;

        EventHandler handler = UserSelected;

        if (handler != null)
            handler(this, new EventArgs());

        DialogResult = true;
        Close();
    }

イベントは別のに移動Windowするので、問題はここにはないのではないかと思います。

4

0 に答える 0