2014-10-06 3 views
1

IsEditable = true이고 ReadOnly = True 인 동안 RadComboBox의 전체 텍스트 영역을 클릭 가능하게 만들 수 있습니까?Silverlight RadComboBox는 전체 texbox 영역을 클릭 할 수있게합니다.

IsEditable = false로 설정 하겠지만 불행히도 항목을 선택할 때 사용자 지정 텍스트를 표시하려면 편집 가능해야합니다. 여러 항목을 선택하고 선택한 항목의 목록을 표시하도록 설정했습니다. IsEditable을 비활성화하면 .Text 특성이 손실되고 사용자 지정 텍스트를 설정할 수 없습니다.

내 두 최상의 선택은 다음과 같습니다
1) 어떻게 든 어떻게 든) 전체 textbar의 클릭을 만드는 스타일뿐 아니라 화살표
2를 적용 IsEditable이 false로 설정하면 사용자 정의 텍스트 디스플레이를 적용합니다.

불행히도 나는 어떤 방법으로도 도움이 될 수 없다는 것을 알지 못합니다. 감사합니다

편집 : 우리는 실버 라이트와하지 ASP.net을 사용하는 것을 제외하고 이것은 이상적 일 것이다 http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/checkboxes/defaultcs.aspx

이 그냥 어떻게 든 텍스트 영역 그래서 드롭 다운 메뉴가 열립니다 클릭 할 수 있도록, 아마 더 현실 . 오른쪽의 ComboBox처럼 입력 할 수 없습니다.
http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/comboboxvsdropdownlist/defaultcs.aspx

답변

0

나는 다른 사람이 여기에 구현하는 multiselectcombobox을 찾는 결국 그 자체로 우리는 이미 하나가 구현되어 있으므로 콤보 상자 IsEditable이 fal로 설정되어있는 동안 사용자가 사용자 지정 메시지를 표시하는 방법을 보았습니다. se.

은 잠시 동안 그 코드를보고 나는 그것이 나를 위해 작동 할 수있는 방법을 본 후, 나는 우리의 사용자 정의 MultiSelectComboBox의 XAML 내부

<ucControls:RadComboBox.SelectionBoxTemplate> <DataTemplate> <TextBlock Text="{Binding Text,ElementName=RadCombo}" /> </DataTemplate> </ucControls:RadComboBox.SelectionBoxTemplate>

을 넣어.사용

<ucControls:RadComboBox 
    x:Name="RadCombo" 
    Text="" 
    ........ 

<ucControls:RadComboBox.SelectionBoxTemplate> <DataTemplate> <TextBlock Text="{Binding Text,ElementName=RadCombo}" /> </DataTemplate> </ucControls:RadComboBox.SelectionBoxTemplate>

....... 
</ucControls:RadComboBox> 

(RadCombo 내가 텍스트에 링크하고 싶은 특정 컨트롤의 이름 인)을 SelectionBoxTemplate에 내장, 이것은 기본적으로 단지 TextBlock에 추가 오버레이를 사용하고 내용이 RadComboBox의 자체 Text에 바인딩되어 있으므로 RadComboBox의 Text를 설정할 때 TextBlock 자체가 업데이트됩니다.

상자를 확인하고 사용자 지정 텍스트를 설정하는 데 필요한 모든 코드가 이미 있으므로 최소한의 코드 변경과 구조 변경이 필요하지 않으므로이 방법이 가장 효과적입니다.

희망이 있으면 행운을 빈다.

0

나는 다양한 우아함을 생각할 수 있습니다. Arrow-ToggleButton과 Text-Input-Area 사이의 남은 틈새를 닫을 수있는 방법이 있습니다. 이제는 그것에 대해 생각한 것입니다 ... OpenDropDownOnFocus 속성을 사용하여 악취가 나는 부작용을 피할 수 있습니다 (클릭으로 인해 포커스 소유자가 변경되지 않는 즉시 중단됩니다).

MouseLeftButtonDown 클릭 핸들러를 RadComboBox에 등록하면 처리되지 않은 이벤트뿐만 아니라 모두 이벤트를받을 수 있습니다. 그런 다음 DropDown을 토글 할 수 있습니다. 그러나 Arrow-ToggleButton을 방해하고 싶지 않으므로 마우스 클릭의 출처를 확인합니다. 편리하게 사용할 수

public class MyView : UserControl 
{ 
    public MyView() 
    { 
     InitializeComponent(); 
     MouseButtonEventHandler handler = OnComboBoxClicked; 
     radComboBox.AddHandler(UIElement.MouseLeftButtonDownEvent, handler, 
      handledEventsToo: true); 
    } 

    private void OnComboBoxClicked(object sender, MouseButtonEventArgs args) 
    { 
     if (!args.Handled || 
      !args.IsRoutedEventFromToggleButton(
       togglebuttonAncestorToStopTheSearch: (UIElement) sender)) 
     { 
      ToggleDropDown(); 
     } 
    } 
} 

및 확장 방법 :

http://www.telerik.com/support/code-library/a-multiselect-combobox

내가 전체 콤보를 필요로하지 않았다

public static class ControlExtensions 
{ 
    public static bool IsRoutedEventFromToggleButton(
     this RoutedEventArgs args, 
     UIElement togglebuttonAncestorToStopTheSearch) 
    { 
     ToggleButton toggleButton = ((UIElement) args.OriginalSource) 
      .GetAncestor<ToggleButton>(togglebuttonAncestorToStopTheSearch); 
     return toggleButton != null; 
    } 

    public static TAncestor GetAncestor<TAncestor>(
     this DependencyObject subElement, 
     UIElement potentialAncestorToStopTheSearch) 
     where TAncestor : DependencyObject 
    { 
     DependencyObject parent; 
     for (DependencyObject subControl = subElement; subControl != null; 
      subControl = parent) 
     { 
      if (subControl is TAncestor) return (TAncestor) subControl; 

      if (object.ReferenceEquals(subControl, 
       potentialAncestorToStopTheSearch)) return null; 


      parent = VisualTreeHelper.GetParent(subControl); 
      if (parent == null) 
      { 
       FrameworkElement element = subControl as FrameworkElement; 
       if (element != null) 
       { 
        parent = element.Parent; 
       } 
      } 
     } 
     return null; 
    } 
} 
+0

이 기능을 구현했지만 텍스트와 드롭 다운 화살표 사이의 영역을 IsEditable이 활성화 된 콤보 상자에서 클릭 할 수 있도록 허용하지 않았습니다. 그래도 고마워. 나는 곧 여기에 올릴 완벽한 솔루션을 발견했다. – Max

관련 문제