我有一個自定義樣式的按鈕和一個按下狀態的觸發器:
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="BorderButton" Value="#0061AE" />
</ControlTemplate.Triggers>
如果我在聚焦按鈕上按空格鍵,則此按下狀態有效。但是在使用回車鍵時,看不到按下狀態,并且按鈕的動作被觸發而沒有任何效果。如果我在聚焦按鈕上按住空格鍵,我就可以看到效果。進不去。我現在的問題是:是否可以在沒有代碼隱藏的情況下為空格鍵添加與 enter 鍵相同的功能,并且只更改樣式中的某些內容?
這是我的按鈕:
<Button Style="{DynamicResource BrandedButtonStyle}" Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="2"
Width="316"
HorizontalAlignment="Left"
Margin="40,0,40,0"
Content="{i18n:Translate Wizard_Btn_Next}"
Command="{Binding Path=NextCommand}"
AutomationProperties.AutomationId="ButtonNext"/>
這是風格:
<Style x:Key="BrandedButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Background" Value="{DynamicResource Secondary}" />
<Setter Property="Foreground" Value="{DynamicResource OnSecondary}" />
<Setter Property="FontSize" Value="14" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="MinWidth" Value="132" />
<Setter Property="MinHeight" Value="32" />
<Setter Property="Padding" Value="12,8" />
<Setter Property="FocusVisualStyle" Value="{DynamicResource ButtonFocusVisual}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}" x:Name="BorderButton" BorderThickness="0">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5,0" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="BorderButton" Value="{DynamicResource SecondaryPress}" />
<Setter Property="Foreground" Value="{DynamicResource OnSecondary}" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{DynamicResource OnBackground10}" />
<Setter Property="Foreground" Value="{DynamicResource OnBackground30}" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource SecondaryHover}" />
<Setter Property="Foreground" Value="{DynamicResource OnSecondary}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
uj5u.com熱心網友回復:
您的問題是由于 IsPressed 屬性的狀態在 Enter 鍵上沒有改變。
做一個簡單的測驗:
<Button x:Name="pressedButton" Content="Pressed"/>
public MainWindow()
{
InitializeComponent();
DependencyPropertyDescriptor.FromProperty(ButtonBase.IsPressedProperty, typeof(ButtonBase))
.AddValueChanged(pressedButton,
(s, e) =>
{
ButtonBase button = (ButtonBase)s;
Debug.WriteLine($"IsPressed: {button.IsPressed}");
});
要解決此問題,您必須實作一個附加屬性,該屬性在按鈕獲得焦點時按下 Enter 時更改其狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/536706.html
標籤:wpf按钮
