【问题标题】:How to select default button in wpf dialog?如何在 wpf 对话框中选择默认按钮?
【发布时间】:2011-11-27 10:31:26
【问题描述】:

我正在创建一个 WPF 对话框。就像我们普通的messagebox 带有okcancel 按钮。如何创建这样的对话框,以便在打开对话框时选择Ok按钮?

【问题讨论】:

  • 为“确定”按钮设置 IsDefault=True
  • 它只启用保存按钮,但不显示按钮被选中

标签: c# wpf dialog


【解决方案1】:

设置窗口的默认按钮

将默认按钮的 IsDefault property 设置为 true。

请注意,您还可以通过将按钮的 IsCancel property 设置为 true 来设置窗口的取消按钮。


在窗口中设置选中(聚焦)按钮

如果你想选择一个特定的按钮,那么使用 Focus 方法,如下所示:

yourButton.Focus();

您可以在加载 Window 时执行此操作(在 Window_Loaded 事件中)。

要在 Window 打开时选择特定按钮,请确保其 IsTabStop property 设置为 true,并确保其 TabIndex property 低于 Window 上的任何其他控件。

【讨论】:

  • 感谢帮助,但不起作用。 .它没有显示按钮被选中它只启用输入按钮任何替代品??
  • @iamabhiee 已编辑以将焦点设置在按钮上。 HTH。
【解决方案2】:

只需创建一个新按钮模板并更改 IsDefault=Tue 状态的外观。 我刚刚创建了一个样式并修改了状态。

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
x:Class="WpfApplication7.Window3"
x:Name="Window"
Title="Window3"
Width="640" Height="480" FocusManager.FocusedElement="{Binding ElementName=test}">

<Window.Resources>
    <Style x:Key="ButtonFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle Margin="2"
                    Stroke="red" StrokeThickness="1"
                     SnapsToDevicePixels="true"  StrokeDashArray="1 2"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
        <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Padding" Value="1"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name="border" BorderThickness="1" BorderBrush="#FF040000" CornerRadius="5">
                        <Border.Background>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FF7A7A7A" Offset="0"/>
                                <GradientStop Color="#FFE7E7E7" Offset="1"/>
                            </LinearGradientBrush>
                        </Border.Background>
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                                                    <Trigger Property="IsDefault" Value="True">
                            <Setter Property="Background" TargetName="border">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="#FFA76F6F" Offset="0"/>
                                        <GradientStop Color="#FFE7E7E7" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsFocused" Value="True"/>
                                <Condition Property="IsDefault" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" TargetName="border">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="#FFC2BE5B" Offset="0.007"/>
                                        <GradientStop Color="#FFE7E7E7" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </MultiTrigger>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="BorderBrush" TargetName="border" Value="#FF01641D"/>
                            <Setter Property="BorderThickness" TargetName="border" Value="2"/>
                            <Setter Property="Background" TargetName="border">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="#FF528159" Offset="0"/>
                                        <GradientStop Color="#FFE7E7E7" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid x:Name="LayoutRoot">
    <Button x:Name="test" Content="Button" HorizontalAlignment="Left" Height="26" Margin="130,157,0,0" VerticalAlignment="Top" Width="164" Style="{DynamicResource ButtonStyle1}" IsDefault="True"/>
    <Button Content="Button" Height="26" Margin="298,157,162,0" VerticalAlignment="Top" Style="{DynamicResource ButtonStyle1}"/>
    <Button Content="Button" HorizontalAlignment="Right" Height="26" Margin="0,157,-6,0" VerticalAlignment="Top" Width="164" Style="{DynamicResource ButtonStyle1}"/>
</Grid>

【讨论】:

    【解决方案3】:

    IsDefault 怎么样?

    <Button Command="{Binding MyButtonCommand}"
            Content="My Button Text"
            IsDefault="True"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多