【问题标题】:ListView control and blue border highlightListView控件和蓝色边框高亮
【发布时间】:2012-09-09 16:25:02
【问题描述】:

我正在创建一个使用几个 ListView 控件的应用程序。我有一个特殊的配色方案,我注意到,当鼠标进入 ListView 控件时,它周围有一个细的蓝色边框突出显示。

我无法弄清楚这是在哪里生成的。我正在使用 Expression Blend 来修改控件,但是我可以找到的 ListView 控件的所有组件都没有此蓝色的定义。事实上,ListView 控件中没有任何东西具有用于焦点视觉样式的触发器或状态,这是控件的行为方式。

【问题讨论】:

    标签: wpf listview expression-blend


    【解决方案1】:

    试试这个,应该会成功:

    <ListView Background="Transparent" BorderThickness="0" />
    

    如果您想要这里的样式解决方案,它是:

    <Style x:Key="{x:Type ListView}" TargetType="{x:Type ListView}">
      <Setter Property="SnapsToDevicePixels" Value="true"/>
      <Setter Property="OverridesDefaultStyle" Value="true"/>
      <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
      <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
      <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
      <Setter Property="VerticalContentAlignment" Value="Center"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type ListView}">
            <Border Name="Border"
              BorderThickness="1"
              BorderBrush="#888888"
              Background="#FFFFFF">
              <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
                <ItemsPresenter />
              </ScrollViewer>
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="IsGrouping"
                       Value="true">
                <Setter Property="ScrollViewer.CanContentScroll"
                        Value="false"/>
              </Trigger>
              <Trigger Property="IsEnabled"
                       Value="false">
                <Setter TargetName="Border"
                        Property="Background"
                        Value="#AAAAAA"/>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
    
    <Style x:Key="{x:Type ListViewItem}" TargetType="{x:Type ListViewItem}">
      <Setter Property="SnapsToDevicePixels" Value="true"/>
      <Setter Property="OverridesDefaultStyle" Value="true"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type ListBoxItem}">
            <Border 
              Name="Border"
              Padding="2"
              SnapsToDevicePixels="true"
              Background="Transparent">
              <GridViewRowPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="IsSelected" Value="true">
                <Setter TargetName="Border" Property="Background" Value="#DDDDDD"/>
              </Trigger>
              <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Foreground" Value="#888888"/>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
    

    ListView 样式内使用边框,在ListViewItem 样式内使用IsSelected 的触发器(您可以更改边框大小或仅更改颜色。

    【讨论】:

    • 谢谢,确实有效。虽然我仍然想知道蓝色的来源以及是否可以更改它。
    • @JakeShakesworth 查看编辑。只需使用 ListView 和 ListViewItem 样式的边框大小/颜色(因为 IsSelectedTriggers 触发时的边框会破坏另一个样式。
    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2019-03-08
    • 2014-03-18
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多