2012-07-03 4 views
0

텍스트 상자에 다른 텍스트 상자의 텍스트가 포함되어있을 때 텍스트 상자를 강조 표시하는 XAML을 만들고 싶습니다. 본질적으로 검색된 항목을 강조 표시합니다.테두리 안의 텍스트 상자에 내 검색 텍스트 상자의 텍스트가있는 경우 테두리를 변경하십시오.

UI : Here is my UI:

남아있는 유일한 사람이 세부 사항에 검색어를 포함 할 때까지 UI의 왼쪽 하단에 검색 텍스트 상자에 사용자 유형 아무것도, 그것이 트 리뷰에서 워크 스테이션을 필터링 . 그런 다음 트리보기 항목을 선택하면 오른쪽의 세부 정보가 채워집니다. 위의 워크 스테이션 이름 필드에 표시된 것과 같이 검색어가 포함 된 텍스트 상자를 강조 표시하면 좋을 것입니다. 여기

는 내 코드의 일부 :

하드 코딩 강조 텍스트 박스

<StackPanel Grid.Column="1" Grid.Row="0"> 
    <Border Name="HighlightBorder" Grid.Column="1" Grid.Row="0" CornerRadius="4"> 
     <Border.Background> 
       <RadialGradientBrush RadiusX="1" RadiusY="0.7"> 
        <GradientStop Color="Black" Offset="1"/> 
        <GradientStop Color="#FFFFEA00"/> 
       </RadialGradientBrush> 
     </Border.Background> 

     <TextBox Margin="5" Height="32" FontSize="16" Foreground="White" Text="{Binding WorkstationName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
    </Border> 
</StackPanel> 

검색 텍스트 상자 :

<Grid> 
    <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="Search:" Foreground="White" FontSize="16"/> 
    <TextBox Grid.Column="1" Text="{Binding SearchCriteria, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
</Grid> 

만을 가지고있는 테두리가 할 수있는 간단한 방법이 있을까요 그 그라디언트 배경 텍스트 상자에 검색 텍스트 상자에 문자열을 포함하고 그렇지 않으면 검정색일까요? 나는 그것이 XAML만의 솔루션이되고 싶지만, 나는 그것에 대해서도 완고하지 않다.

배경 펄스가 약간 깔끔하다고 생각하지만 내 애니메이션을 알아 내기 위해 싸울 수 있습니다. 제 질문에 도움이 필요합니다.

감사합니다.

답변

1

나는 당신은 다음처럼 사용하면 컨버터

public class ContainsSearchTextConverter : IMultiValueConverter 
{ 
    #region IMultiValueConverter Members 

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (values.Any(v => v == DependencyProperty.UnsetValue)) 
      return null; 

     var text = values[0].ToString(); 

     var search = values[1].ToString(); 

     if (string.IsNullOrWhiteSpace(search)) 
      return null; 

     if (text.Contains(search)) 
      return "true"; 

     return null; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

의 형태로 코드를 조금 필요합니다 생각 : 프롬프트와 정확한 응답을

<StackPanel> 
     <Border Name="HighlightBorder" Grid.Column="1" Grid.Row="0" CornerRadius="4"> 
      <Border.Style> 
       <Style TargetType="Border"> 
        <Style.Triggers> 
         <DataTrigger Value="true"> 
          <DataTrigger.Binding> 
           <MultiBinding Converter="{StaticResource containsSearchTextConverter}"> 
            <Binding ElementName="workStationNameTextBox" Path="Text" /> 
            <Binding Path="SearchCriteria" /> 
           </MultiBinding> 
          </DataTrigger.Binding> 
          <Setter Property="Background" > 
           <Setter.Value> 
             <RadialGradientBrush RadiusX="1" RadiusY="0.7"> 
              <GradientStop Color="Black" Offset="1"/> 
              <GradientStop Color="#FFFFEA00"/> 
             </RadialGradientBrush> 
           </Setter.Value> 
          </Setter> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Border.Style> 

      <TextBox Name="workStationNameTextBox" Background="Black" Margin="5" Height="32" FontSize="16" Foreground="White" Text="{Binding WorkstationName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
     </Border> 
    </StackPanel> 
+0

감사합니다! 초보자가 리소스에서 변환기를 정의하는 것이 더 어려울 수도 있다는 것을 스스로 알아야만했습니다. "" – JonD

+0

해당 스타일을 팝하려면 테두리 밖으로 및 리소스를 다른 테두리에 사용할뿐만 아니라, 거기에 어떤 종류의 RelativeSource 바인딩 하드 코드 된 ElementName ("workStationNameTextBox") 코딩 된 바꿀 수 있습니까? – JonD

+0

내가 아는 그. ElementName에 대한 필요성을 없애려면 사용자 정의 컨트롤에 모든 요소를 ​​캡슐화하는 것이 더 나을 것입니다. 모험적이라면 테두리를 없애고 HLSL을 사용하여 텍스트 상자에 광선 효과를 구현하는 방법을 살펴보십시오. – Nogusta

관련 문제