Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 突出显示已激活的按钮WPF_C#_Wpf_Xaml_Triggers - Fatal编程技术网

C# 突出显示已激活的按钮WPF

C# 突出显示已激活的按钮WPF,c#,wpf,xaml,triggers,C#,Wpf,Xaml,Triggers,我有一个由静态方法调用的wpf表单,其调用方式与MessageBox.Show();按钮布局在方法中定义,并可在特定参数内自定义。每个按钮都添加了一个基于中心样式的样式 此样式的一部分是突出显示默认按钮的触发器,因此用户知道如果按下enter,将会发生什么。但是,如果用户按tab键几次,就会有一个小的点边框依次移动到每个按钮中,然后这就是他们按enter键时得到的按钮。我希望我的突出显示从默认按钮开始,但按照这个?集中如果用户选择在按钮之间进行制表,则为 我原以为要在中触发的属性将是IsFocu

我有一个由静态方法调用的wpf表单,其调用方式与
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>