c#-修改按钮样式时通过而不是单击来获得焦点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-修改按钮样式时通过而不是单击来获得焦点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2550字,纯文字阅读大概需要4分钟。
内容图文
我想做的事
在用户界面上切换时,大多数WPF控件在接收到键盘焦点时会显示一个虚线边框.用鼠标单击它们时,它们不会显示此边框.
我有一个带有自定义控件模板的按钮,我想要与上述相同的行为,但是我不仅想添加边框,还想修改按钮本身的外观.
我尝试了什么
>自定义FocusVisualStyle.这没有给我足够的灵活性,因为FocusVisualStyle设置的模板已添加到按钮的顶部.据我所知,这不能用于以任何方式修改(样式,动画,…)按钮本身.
>使用具有IsFocused和/或IsKeyboardFocused属性的触发器以及具有Got / LostFocus和/或Got / LostKeyboardFocus事件的EventTriggers对按钮进行样式设置.这也不起作用,因为当我也单击按钮时,所有这些似乎都被触发了.
范例程式码
<StackPanel VerticalAlignment="Center" Width="150">
<StackPanel.Resources>
<ControlTemplate x:Key="CustomButtonTemplate" TargetType="Button">
<!--A simple black border with a content presenter-->
<Border BorderBrush="Black" BorderThickness="1" CornerRadius="2">
<ContentPresenter x:Name="Presenter" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="2" />
</Border>
<ControlTemplate.Triggers>
<!--When receiving keyboard focus modify the button text-->
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter TargetName="Presenter" Property="Content" Value="I have keyboard focus" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style x:Key="CustomFocusVisualStyle" TargetType="Control">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!--Display a red border-->
<Border BorderThickness="1" CornerRadius="2" BorderBrush="Red" Margin="-1" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<Button Content="I am a normal button" Margin="5" />
<Button Content="I am a custom button" Margin="5"
Template="{StaticResource CustomButtonTemplate}"
FocusVisualStyle="{StaticResource CustomFocusVisualStyle}" />
</StackPanel>
请注意,仅当您在两个按钮之间切换时才显示自定义红色焦点边框,而单击按钮时不显示.但是,自定义按钮文本在两种情况下都会被修改.
我该如何实现?
解决方法:
好的,经过无数小时后,我终于找到了适合我的方案的解决方案.我希望它也对您有用.
忘记FocusVisualStyle,那是垃圾.我正在使用与IsKeyboardFocused = True和IsMouseCaptured = False绑定的MultiTrigger.
这是我现在的风格:
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsKeyboardFocused" Value="True"/>
<Condition Property="IsMouseCaptured" Value="False"/>
</MultiTrigger.Conditions>
<Setter Property="BorderBrush" Value="Green" />
<Setter Property="BorderThickness" Value="2" />
</MultiTrigger>
</Style.Triggers>
仅在将其切换到选项卡时,而不是通过鼠标进行聚焦时,这会使我的按钮周围出现绿色环.
内容总结
以上是互联网集市为您收集整理的c#-修改按钮样式时通过而不是单击来获得焦点全部内容,希望文章能够帮你解决c#-修改按钮样式时通过而不是单击来获得焦点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。