从ListBox项中删除焦点矩形

时间:2010-02-24 12:31:08

标签: silverlight silverlight-3.0 listbox

如何从silverlight ListBox中删除焦点矩形?我有这段代码:

<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 个答案:

答案 0 :(得分:1)

在Silverlight中,ListBoxItem类型没有FocusVisualStyle属性,因此出错。

为了实现目标,您需要为ListBoxItem提供新模板。从Silverlight文档中,您将找到ListBox Styles and Templates中的默认模板。

将ListBoxItem模板复制到静态资源(App.Xaml将是个好地方)

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

现在从“聚焦”StoryBoard中删除VisualState,然后删除名为“FocusVisualElement”的最终矩形。

现在让你的ContainerStyle属性看起来像: -

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