C# 突出显示已激活的按钮WPF
我有一个由静态方法调用的wpf表单,其调用方式与C# 突出显示已激活的按钮WPF,c#,wpf,xaml,triggers,C#,Wpf,Xaml,Triggers,我有一个由静态方法调用的wpf表单,其调用方式与MessageBox.Show();按钮布局在方法中定义,并可在特定参数内自定义。每个按钮都添加了一个基于中心样式的样式 此样式的一部分是突出显示默认按钮的触发器,因此用户知道如果按下enter,将会发生什么。但是,如果用户按tab键几次,就会有一个小的点边框依次移动到每个按钮中,然后这就是他们按enter键时得到的按钮。我希望我的突出显示从默认按钮开始,但按照这个?集中如果用户选择在按钮之间进行制表,则为 我原以为要在中触发的属性将是IsFocu
MessageBox.Show()
;按钮布局在方法中定义,并可在特定参数内自定义。每个按钮都添加了一个基于中心样式的样式
此样式的一部分是突出显示默认按钮的触发器,因此用户知道如果按下enter
,将会发生什么。但是,如果用户按tab键几次,就会有一个小的点边框依次移动到每个按钮中,然后这就是他们按enter键时得到的按钮。我希望我的突出显示从默认按钮开始,但按照这个?集中如果用户选择在按钮之间进行制表,则为
我原以为要在
中触发的属性将是IsFocused
,但这似乎并不像我预期的那样-下面是我的xaml代码片段:
<!--....-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="border"
BorderThickness="1"
Padding="0"
BorderBrush="WhiteSmoke"
CornerRadius="2"
Background="{TemplateBinding Background}">
<ContentPresenter x:Name="Contents" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="true">
<Setter Property="RenderTransform" TargetName="Contents">
<Setter.Value>
<TranslateTransform X="0" Y="2"/>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsDefault" Value="true">
<Setter Property="BorderThickness" TargetName="border" Value="3"/>
<Setter Property="BorderBrush" TargetName="border" Value="White"/>
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="IsDefault" Value="True"/>
</Trigger>
<Trigger Property="IsFocused" Value="False">
<Setter Property="IsDefault" Value="False"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<!--....-->
遗憾的是,这段代码没有生成一个与上面xaml中显示的IsDefault触发器有明显效果的触发器(我已经删除了两个IsFocused触发器)。我不确定您想要什么,但据我所知,您需要:
<Window.Resources>
<ResourceDictionary>
<Style TargetType="Button">
<Setter Property="Padding" Value="5" />
<Setter Property="Margin" Value="5" />
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="IsDefault" Value="True" />
<Setter Property="BorderThickness" Value="3" />
<Setter Property="BorderBrush" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</Window.Resources>
<StackPanel FocusManager.FocusedElement="{Binding ElementName=btnDefault}">
<Button>Button 1</Button>
<Button>Button 2</Button>
<Button x:Name="btnDefault">Button 3</Button>
<Button>Button 4</Button>
<Button>Button 5</Button>
<Button>Button 6</Button>
<Button>Button 7</Button>
</StackPanel>
按钮1
按钮2
按钮3
按钮4
按钮5
按钮6
按钮7
聚焦应用样式/模板的实际按钮。您不能在样式/模板本身中执行此操作。啊!这是有道理的;因此,在按钮thisButton=new button()之后,将焦点更改位添加到代码后面的按钮中代码>将每个按钮添加到表单中?我已经编辑了问题,以包含隐藏的代码片段-尽量不包含大量代码-希望到目前为止,这足以看到我对您的评论的解释。。。虽然我没有让它工作,所以一定错过了什么!您试图对该按钮执行什么操作?使用户按enter键时将被“按下”的按钮与所有其他按钮显示不同,即使用户四处切换以更改默认按钮。为我的不清晰表示歉意;我缺乏足够的理解来表达我自己的需求——只是足够的知识让我困惑!所以我的版本的问题是触发器在controltemplate上,而不是样式本身?
<Window.Resources>
<ResourceDictionary>
<Style TargetType="Button">
<Setter Property="Padding" Value="5" />
<Setter Property="Margin" Value="5" />
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="IsDefault" Value="True" />
<Setter Property="BorderThickness" Value="3" />
<Setter Property="BorderBrush" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</Window.Resources>
<StackPanel FocusManager.FocusedElement="{Binding ElementName=btnDefault}">
<Button>Button 1</Button>
<Button>Button 2</Button>
<Button x:Name="btnDefault">Button 3</Button>
<Button>Button 4</Button>
<Button>Button 5</Button>
<Button>Button 6</Button>
<Button>Button 7</Button>
</StackPanel>