WPF自定义DatePicker模板鼠标悬停出现内部边框问题求助
问题原因
你遇到的多余边框来源于DatePickerTextBox的默认样式触发器:WPF依赖属性的优先级中,控件默认样式的触发器赋值优先级高于你直接设置的本地属性值,所以即使你给PART_TextBox静态设置了BorderThickness="0",当鼠标悬停时,DatePickerTextBox默认的IsMouseOver触发器还是会重新给边框赋值,导致多余边框出现。另外你写的DatePickerTextBox内部样式没有指定TargetType,部分属性规则没有生效,同时你在DatePicker的IsMouseOver触发器里写的{Binding ToYourBorder}是无效绑定,也可能干扰样式渲染。
解决方法
- 替换
DatePickerTextBox的内部样式,明确指定目标类型,同时补充触发器覆盖鼠标悬停、聚焦场景下的边框设置:
<DatePickerTextBox x:Name="PART_TextBox" BorderThickness="0" BorderBrush="Transparent" HorizontalContentAlignment="Stretch" Padding="{TemplateBinding Padding}" VerticalContentAlignment="Center" Visibility="Visible" SelectionBrush="#FF6F5DF5" FocusVisualStyle="{x:Null}" Grid.Column="0" Margin="0,3,0,0"> <DatePickerTextBox.Style> <Style TargetType="DatePickerTextBox"> <Setter Property="BorderThickness" Value="0"/> <Setter Property="BorderBrush" Value="Transparent"/> <Style.Triggers> <!-- 覆盖鼠标悬停时的默认边框 --> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="BorderThickness" Value="0"/> <Setter Property="BorderBrush" Value="Transparent"/> </Trigger> <!-- 覆盖聚焦时的默认边框 --> <Trigger Property="IsFocused" Value="True"> <Setter Property="BorderThickness" Value="0"/> <Setter Property="BorderBrush" Value="Transparent"/> </Trigger> </Style.Triggers> </Style> </DatePickerTextBox.Style> </DatePickerTextBox>
- 删除DatePicker控件模板
IsMouseOver触发器里的无效绑定行:
<!-- 删除这行无效代码 --> <Setter Property = "BorderBrush" Value="{Binding ToYourBorder}"/>
修改完成后重新编译运行即可消除鼠标悬停时的多余边框。
内容的提问来源于stack exchange,提问作者Coskun Ozogul
相关产品推荐
相关产品推荐

