■72838 / inTopicNo.1) |
複数列コンボボックス |
□投稿者/ しがないサラリーマン (1回)-(2014/07/24(Thu) 17:17:38)
|
分類:[C#]
WPFで、Accessのような複数列のコンボボックスをユーザコントロールとして作成しようと、
いろんなサイトを見様見真似しながら奮闘しています。
そして、複数列を実現できたのですが、
・リストアイテムから選択しても、テキスト部に表示されない。
・テキスト部に文字入力しても、同じ先頭文字のリストアイテムが自動選択されない。
の問題を抱えています。
どこを改良すれば良いか、教えてください。
よろしくお願いします。
※C# 2013
≪MultiColumnComboBox.xaml≫
<UserControl x:Class="Test.UI.Controls.MultiColumnComboBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="UserControl"
Width="100">
<ComboBox
IsReadOnly="False"
IsEditable="True"
ItemsSource="{Binding ElementName=UserControl, Path=ItemsSource}"
>
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Width="180" />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBox.ItemTemplate>
<HierarchicalDataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Column1}" Width="100" />
<TextBlock Text="{Binding Column2}" Width="100" />
</StackPanel>
</HierarchicalDataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</UserControl>
≪MultiColumnComboBox.xaml.cs≫
using System;
using System.Collections;
using System.Windows;
using System.Windows.Controls;
namespace Test.UI.Controls
{
public partial class MultiColumnComboBox : UserControl
{
public MultiColumnComboBox()
{
InitializeComponent();
}
public IEnumerable ItemsSource
{
get { return (IEnumerable)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(MultiColumnComboBox), new UIPropertyMetadata(null));
}
}
≪MultiColumnComboBoxItem.cs≫
using System;
namespace Test.UI.Controls
{
public class MultiColumnComboBoxItem
{
public MultiColumnComboBoxItem(object column1, object column2)
{
Column1 = column1.ToString();
Column2 = column2.ToString();
}
public string Column1 { get; set; }
public string Column2 { get; set; }
}
}
≪MainWindow.xaml≫
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tj="clr-namespace:Test.UI.Controls"
xmlns:local="clr-namespace:Test.UI.Controls" x:Class="Test.UI.Controls.MainWindow"
Title="MainWindow" Height="350" Width="525">
<Grid>
<tj:MultiColumnComboBox x:Name="mccombo1" Width="80"
HorizontalAlignment="Left" VerticalAlignment="Center"
Margin="10,10,0,288.4"
/>
</Grid>
</Window>
≪MainWindow.xaml.cs≫
using System;
using System.Windows;
namespace Test.UI.Controls
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MultiColumnComboBoxItem[] items = {
new MultiColumnComboBoxItem("aaaaaaaa","1"),
new MultiColumnComboBoxItem("bbbbb","2"),
new MultiColumnComboBoxItem("ccccccccc","33")
};
mccombo1.ItemsSource = items;
}
}
}
以上です。
よろしくお願い致します。
|
|