하지만 ComboBox 를 Edit 를 하다보면 한글에 대해서 입력한 값이
Text 프로퍼티에 바로바로 들어가지 않는 것을 알 수 있다.
예상으로는 아마도 ComboBox 에서 한글 입력에 대해서 음절(or 어절)이 끝나지 않았다고 판단하는 것 같고
그래서 Text 프로퍼티에 해당 값을 넣어주지 않는 듯하다.
[XAML]
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="Height"
Loaded="Window_Loaded">
<Grid>
<ComboBox x:Name="ComboBoxCtrl"
IsEditable="True"
IsTextSearchEnabled="True"
KeyUp="ComboBoxCtrl_KeyUp">
<ComboBoxItem>테스트1Item</ComboBoxItem>
<ComboBoxItem>테스트2Item</ComboBoxItem>
<ComboBoxItem>테스트3Item</ComboBoxItem>
</ComboBox>
</Grid>
</Window>
[CODE]
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace WpfApplication2
{
/// <summary>
/// MainWindow.xaml에 대한 상호 작용 논리
/// </summary>
public partial class MainWindow : Window
{
private TextBox mTxtBox = null;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// 한글의 원할한 검색을 위해서 ComboBox 의 Editable TextBox 를 가져온다.
this.mTxtBox = ComboBoxCtrl.Template.FindName("PART_EditableTextBox", ComboBoxCtrl) as TextBox;
}
private void ComboBoxCtrl_KeyUp(object sender, KeyEventArgs e)
{
ComboBoxCtrl.Items.Filter -= this.FilterPredicate;
if ((e.Key == Key.Enter) || (e.Key == Key.Tab) || (e.Key == Key.Return))
{
//ComboBoxCtrl.Items.Filter = null;
return;
}
else
{
ComboBoxCtrl.IsDropDownOpen = true;
ComboBoxCtrl.Items.Filter += this.FilterPredicate;
}
}
private bool FilterPredicate(object obj)
{
string sValue = string.Empty;
if (obj is string)
sValue = obj.ToString();
else if (obj is ComboBoxItem)
sValue = (obj as ComboBoxItem).Content.ToString();
else
{
System.Reflection.PropertyInfo info = obj.GetType().GetProperty(ComboBoxCtrl.DisplayMemberPath);
if (info != null)
{
object oValue = info.GetValue(obj, null);
if (oValue != null)
sValue = oValue.ToString();
}
}
if (!string.IsNullOrEmpty(sValue) && sValue.Contains(this.mTxtBox.Text))
return true;
else
return false;
}
}
}
그래서 차선으로 ComboBox 의 Template 에서 입력 컨트롤인 "PART_EditableTextBox" 를 가져와서
입력된 문자열을 바로 접근하였다.
한글에 대해서 좀 더 손쉬운 방법이 있지 않을까 하는 생각으로 찾고 있지만...
'Dev::DotNet > WPF' 카테고리의 다른 글
WPF 에서 DoEvents (0) | 2013.11.18 |
---|---|
WPF Visual Tree or Logical Tree 순회 (0) | 2013.11.13 |
NetAdvantage XamDockManager 의 Splitter 고정 (0) | 2013.11.08 |
XAML 에서 StringFormat 으로 문자열 표시 (0) | 2013.10.25 |
FlowDocument 의 Block 작업영역 구하기 (0) | 2012.08.23 |