2017-01-22 8 views
0

일부 문자를 동적으로 다시 색칠하거나 다른 텍스트 블록의 뒷면 색을 바인딩하는 방법으로 목록보기 안에 텍스트 블록이 있습니다.일부 문자 채색

캐릭터의 색상에 대한 논리가 있으므로 어떻게 할 수 있습니까?

내 XAML을 부착 :

<ListView x:Name="LV" ItemsSource= "{Binding Lggv}" SelectionChanged="dataGridData_SelectionChanged" ItemContainerStyle="{StaticResource ListViewItemStyle}" > 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <Border BorderThickness="1" BorderBrush="Black"> 
        <Border.Visibility> 
         <MultiBinding Converter="{StaticResource V_converter }"> 
          <Binding Path="Type"></Binding> 
          <Binding Path="NodeID"></Binding> 
          <Binding Path="TLV"></Binding> 
         </MultiBinding> 
        </Border.Visibility> 
        <Grid> 
         <Grid.Visibility> 
          <MultiBinding Converter="{StaticResource V_converter }"> 
           <Binding Path="Type"></Binding> 
           <Binding Path="NodeID"></Binding> 
           <Binding Path="TLV"></Binding> 
          </MultiBinding> 
         </Grid.Visibility> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="150"></ColumnDefinition> 
          <ColumnDefinition Width="55"></ColumnDefinition> 
          <ColumnDefinition Width="1*"></ColumnDefinition> 
         </Grid.ColumnDefinitions> 
         <TextBlock x:Name="tbHeader" Text="{Binding Info }" AllowDrop="True" FontWeight="Bold" Grid.Column="2" Visibility="{Binding Visibility_Header}" > 

          <TextBlock.Style> 
           <Style TargetType="TextBlock"> 
            <Setter Property="Background"> 
             <Setter.Value> 
              <!-- this is the default background--> 
              <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
               <GradientStop Color="#FFCEE6C6" Offset="0.008"/> 
               <GradientStop Color="#FF9ECF8C" Offset="0.987"/> 
              </LinearGradientBrush> 
             </Setter.Value> 
            </Setter> 
           </Style> 
          </TextBlock.Style> 
         </TextBlock> 
        </Grid> 
       </Border> 

       <Grid x:Name="GridData"> 

        <Grid.Visibility> 
         <MultiBinding Converter="{StaticResource V_converter }"> 
          <Binding Path="Type"></Binding> 
          <Binding Path="NodeID"></Binding> 
          <Binding Path="TLV"></Binding> 
         </MultiBinding> 
        </Grid.Visibility> 
        <Grid.Background> 
         <MultiBinding Converter="{StaticResource converter }"> 
          <Binding Path="Type"></Binding> 
          <Binding Path="NodeID"></Binding> 
          <Binding Path="TLV"></Binding> 
         </MultiBinding> 
        </Grid.Background> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="150"></ColumnDefinition> 
         <ColumnDefinition Width="55"></ColumnDefinition> 
         <ColumnDefinition Width="1*"></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <Border Grid.Column="0" BorderThickness="1" BorderBrush="Black"> 
         <TextBlock Text="{Binding DateTime}" ></TextBlock> 
        </Border> 
        <Border Grid.Column="1" BorderThickness="1" BorderBrush="Black"> 
         <TextBlock Text="{Binding ComPort}"></TextBlock> 
        </Border> 
        <Border Grid.Column="2" BorderThickness="1" BorderBrush="Black"> 
         <TextBlock Text="{Binding Data}" ></TextBlock> 
        </Border> 
       </Grid> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

답변

1

WPF는 WPF가 MVVM 패턴을 중심으로 구축되어 있기 때문에 매우 어려운 그 프로그램처럼 물건을 할 수 있습니다. 따라서 멋지게 재생하려면 ViewModel (MVVM의 VM)을 만들어야합니다. 이 같은 목록에 XAML 바인딩에서 다음

public IEnumerable<ItemVM> Items { get; set; } 

BackgroundColor 특성 :

<ListView x:Name="MyListView" ItemsSource="{Binding Items}" HorizontalContentAlignment="Stretch"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Text}"> 
      <TextBlock.Background> 
       <SolidColorBrush Color="{Binding BackgroundColor}"/> 
      </TextBlock.Background> 
      </TextBlock> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

// if you want runtime changes to be reflected in the UI 
public class ItemVM : INotifyPropertyChanged 
{ 
    public string Text { // raise property change in setter } 
    public Color BackgroundColor { // whatever you need } 
} 

는 다음과 같은 ItemVM의 목록을 만들 예를 들면 다음과 같습니다의 뷰 모델입니다

NotifyPropertyChanged을 구현하는 데 도움이 필요하면 this 문서를 따르십시오.

+0

전체 텍스트가 아닌 텍스트의 일부 문자를 색칠하고 싶습니다. –