2017-01-22 18 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 (VM от MVVM). Вот пример ViewModel:

// 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 вроде этого:

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

Затем в XAML привязки к списку и 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> 

Если вам нужна помощь при внедрении NotifyPropertyChanged, то следуйте за статьей this.

+0

Я хочу покрасить некоторые символы в текст, а не весь текст. –

 Смежные вопросы

  • Нет связанных вопросов^_^