Как установить свойство только на второй столбец ListView? - PullRequest
0 голосов
/ 16 июня 2010

Введение

У меня есть 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 не устанавливается?

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

Как ни странно, следующий код 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 устанавливается для всех столбцов. Но я хочу его только для второго, потому что в противном случае мой код теста закодированного пользовательского интерфейса возвращает неправильное значение (значение первого столбца вместо значения второго столбца, который я хочу).

1 Ответ

2 голосов
/ 16 июня 2010

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

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

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

Вот снимок экрана Snoop, показывающий, что свойство установлено правильно: Snoop Screen Shot 1

И вот снимок экрана Snoop, показывающий TextBlock (где свойство не установлено ... нет светло-зеленого столбца) в первом столбце: Snoop Screen Shot 2

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

...