Удалить прямоугольник фокуса из элемента ListBox - PullRequest
2 голосов
/ 24 февраля 2010

Как убрать прямоугольник фокуса с ListBox на Silverlight? У меня есть этот код:

<ListBox x:Name="MyListBox" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid >
               ...snipped...
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

и когда я запускаю его, я получаю исключение

System.Windows.Markup.XamlParseException: Invalid attribute value FocusVisualStyle for property Property. [Line: 47 Position: 38]

что я делаю не так? Большое спасибо:)

1 Ответ

1 голос
/ 24 февраля 2010

В Silverlight тип ListBoxItem не имеет свойства FocusVisualStyle, следовательно, ошибка.

Для достижения вашей цели вам необходимо предоставить новый шаблон для ListBoxItem. Из документации Silverlight вы найдете шаблон по умолчанию в Стили и шаблоны ListBox .

Скопируйте шаблон ListBoxItem в статический ресурс (было бы неплохо использовать App.Xaml)

<ControlTemplate TargetType="ListBoxItem" x:Key="ListBoxItemSansFocus">
 <!-- copy of the rest of the control template here -->
</ControlTemplate>

Теперь удалите StoryBoard из «Сфокусированного» * ​​1014 * и удалите последний прямоугольник с именем «FocusVisualElement».

Теперь сделайте ваше свойство ContainerStyle похожим на: -

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="Template" Value="{StaticResource ListBoxItemSansFocus}" />
    </Style>
</ListBox.ItemContainerStyle>
...