2010-06-16 2 views
0

ВведениеКак установить свойство только во втором столбце ListView?

У меня есть ListView и вы хотите отформатировать только второй столбец. Следующий код XAML делает это:

<ListView x:Name="listview"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Property" DisplayMemberBinding="{Binding Path=Key}" Width="100"/> 
      <!-- <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=Value}" Width="250">--> 
      <GridViewColumn Header="Value" Width="250"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=Value}" Foreground="CornflowerBlue" AutomationProperties.Name="{Binding Path=Key}"/> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

одна проблема, у меня есть, что свойство AutomationProperties.Name не быть установлен. Я проверял его с помощью Coded UI Test Builder, и свойство пусто. Свойство Text и Foreground задано правильно.

Вопрос

Кто-нибудь знает, почему AutomationProperties.Name не быть установлен?

Дополнительная информация

достаточно Strangly, следующий код XAML делает установить AutomationProperties.Name

<ListView x:Name="listview"> 
    <ListView.Resources> 
     <Style TargetType="TextBlock"> 
      <Setter Property="AutomationProperties.Name" Value="{Binding Key}"/> 
     </Style> 
    </ListView.Resources> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Property" DisplayMemberBinding="{Binding Path=Key}" Width="100"/> 
      <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=Value}" Width="250"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

Проблема здесь, однако, что AutomationProperties.Name создается на всех колонках , Но я только хочу, чтобы это было на втором, потому что иначе код кода с кодированным пользовательским интерфейсом возвращает неправильное значение (значение первого столбца вместо второго столбца, которое я хочу).

+0

В вашем первом фрагменте XAML синтаксис неверен: 'AutomationProperties.Name = {Binding Path =" Key "}' должно быть 'AutomationProperties.Name =" {Binding Path = Key} "' –

+0

@Thomas Levesque: Спасибо, я исправил его. Я снова запустил проблему. Ошибка XAML, которую вы указали, не была ее источником. – Lernkurve

+0

Вы видите какую-либо ошибку привязки в окне вывода? –

ответ

2

Не знаете, знаете ли вы об этом, но очень полезным инструментом при анализе этих проблем является Snoop.

В частности, он будет выделять (с красным) любые ошибки привязки данных, которые могут возникнуть у вас.

Я взглянул сам, и кажется, что первая часть xaml (выше) теперь работает (после того, как вы очистили синтаксическую ошибку). В Snoop связанные свойства выделяются светло-зеленым цветом.

Вот снимок экрана Snoop показывает свойство создается правильно: Snoop Screen Shot 1

А вот снимок экрана Snoop показывая TextBlock (где свойство не установлен ... нет светло-зеленый колонка) на первой колонке: Snoop Screen Shot 2

и, наконец, я намеренно разбитого переплета, чтобы показать вам, что показывает, Snoop, когда что-то не так, и у вас есть ошибка привязки данных (она выделена красным цветом, и один из столбцы дают дополнительную информацию): Snoop Screen Shot 3

+0

+1, было бы лучше, если бы я мог. Большое спасибо за то, что нашли время попробовать и опубликовать потрясающие скриншоты! Вы правы, Snoop действительно показывает, что свойство установлено, однако Coded UI Test Builder - нет. Кстати, большое спасибо за Snoop 64bit. – Lernkurve

+0

+1 для Snoop, я не могу жить без него ... –

+0

@ Томас Левеск, @Лернкурв: вы, ребята, слишком добры! Благодаря! – cplotts

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