我有一个包含一些内容的RichTextBox。我想隐藏滚动条并在用户将鼠标移到其上时删除边框。 我添加了FocusVisualStyle =“{x:Null}”,我在此链接中读到:Remove focus rectangle on a UserControl
见下文:
<RichTextBox HorizontalAlignment="Left" Height="105" Margin="48,42,0,0" VerticalAlignment="Top" Width="614" Background="Transparent" IsReadOnly="True" ScrollViewer.VerticalScrollBarVisibility="Hidden" BorderBrush="Transparent" ScrollViewer.CanContentScroll="False" FocusVisualStyle="{x:Null}">
</FlowDocument>
blah blah
</FlowDocument>
</RichTextBox>
但是当用户将鼠标移到它上面时,我仍然会看到一个白色边框,我可以上下滚动。
为什么这???
答案 0 :(得分:0)
您所看到的FocusVisual
不是MouseOver effect
,而是默认为RichTextBox应用的<Style TargetType="RichTextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBoxBase">
<Border BorderThickness="{TemplateBinding Border.BorderThickness}"
BorderBrush="{TemplateBinding Border.BorderBrush}"
Background="{TemplateBinding Panel.Background}"
Name="border"
SnapsToDevicePixels="True">
<ScrollViewer HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden"
Name="PART_ContentHost"
Focusable="False" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="UIElement.IsEnabled" Value="False">
<Setter Property="UIElement.Opacity" TargetName="border"
Value="0.56"/>
</Trigger>
<!--<Trigger Property="UIElement.IsMouseOver" Value="True">
<Setter Property="Border.BorderBrush" TargetName="border">
<Setter.Value>
<SolidColorBrush>#FF7EB4EA</SolidColorBrush>
</Setter.Value>
</Setter>
</Trigger>-->
<Trigger Property="UIElement.IsKeyboardFocused" Value="True">
<Setter Property="Border.BorderBrush" TargetName="border">
<Setter.Value>
<SolidColorBrush>#FF569DE5</SolidColorBrush>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
。
您需要覆盖默认模板以删除通过触发器应用的效果(,如果UIElement.IsMouseOver值为true )。
创建一个样式并提供您自己的模板(如果您希望它应用于您应用中的所有RichTextBox,请将其放在应用资源或窗口资源中,无论它适合您的代码。否则,您可以将其内联声明为您的的RichTextbox):
{{1}}
请注意我在上述默认模板中注释的触发器。