【问题标题】:Disabling/overriding highlighting on WPF controls禁用/覆盖 WPF 控件上的突出显示
【发布时间】:2013-10-14 15:23:47
【问题描述】:

我有一个带有 ScrollViewer.VerticalScrollBarVisibility=Auto 的 RichTextBox,它的工作方式和我想要的一样。但是,当我将鼠标悬停在文档上时,我会在整个 RichTextBox 元素周围出现一个蓝色边框,我似乎可以让它消失的唯一方法是设置 IsHitTestVisible=false,但如果我这样做,滚动条也会被禁用...我尝试过的其他事情是 IsFocusable=false 并触发 RichTextBox 的样式,但没有任何成功:

<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="BorderBrush" Value="{x:Null}"/>
    </Trigger>
</Style.Triggers>

我的应用程序中显示在 ListBox 中的图像也有同样的问题。我有一个看起来像这样的 ListBox:

<ListBox ItemsSource="{Binding Photos}"
         BorderBrush="{x:Null}"
         SelectedItem="{Binding SelectedPhoto, Mode=TwoWay}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid IsItemsHost="True" 
                         HorizontalAlignment="Center" 
                         VerticalAlignment="Center" 
                         Columns="3" Rows="1"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding}" 
                   Stretch="Uniform" 
                   SnapsToDevicePixels="True"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                                 Color="Transparent"/>
            </Style.Resources>
            <Setter Property="Foreground" Value="Transparent"/>
            <Setter Property="BorderBrush" Value="{StaticResource Brush_Secondary}"/>
            <Setter Property="BorderThickness" Value="5"/>
            <Setter Property="Margin" Value="5"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="BorderBrush" Value="{StaticResource Brush_Primary}"/>
                </Trigger>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="BorderBrush" Value="{StaticResource Brush_Selected}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

但无论我使用哪种颜色(Brush_Primary/Secondary/Selected),边框总是只是不同深浅的蓝色......我如何摆脱每个 WPF 控件似乎都存在的蓝色覆盖/突出显示的东西?

【问题讨论】:

    标签: c# wpf wpf-controls overlay


    【解决方案1】:

    您可以覆盖RichTextBox template 以删除默认值-

    <Style TargetType="RichTextBox">
       <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border x:Name="Bd"
                            BorderBrush="{TemplateBinding BorderBrush}" 
                            BorderThickness="{TemplateBinding BorderThickness}"
                            SnapsToDevicePixels="True"
                            Background="{TemplateBinding Background}">
                        <ScrollViewer Name="PART_ContentHost"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    【讨论】:

      【解决方案2】:

      这是一个硬核的 necro 响应,但这只是移除了边框。

      <Style x:Key="{x:Type RichTextBox}" TargetType="RichTextBox">
          <Style.Setters>
              <Setter Property="BorderThickness" Value="0" />
          </Style.Setters>
      </Style>
      

      当然,您可以将密钥设置为任何您想要的。但这就是在不覆盖样式的情况下为我移除了边框的原因。

      【讨论】:

        猜你喜欢
        • 2022-01-11
        • 2013-04-26
        • 2011-12-26
        • 1970-01-01
        • 1970-01-01
        • 2014-03-28
        • 2012-06-17
        • 2011-09-01
        相关资源
        最近更新 更多