这本书说
WPF Button类只添加两个 什么是简单的概念 ButtonBase已经提供:作为一个 取消按钮或默认按钮。 这两种机制都很方便 削减对话。如果是Button.IsCancel 在一个按钮内设置为true 对话框(即通过显示的窗口) 它的ShowDialog方法),窗口是 用a自动关闭 DialogResult的错误。如果 Button.IsDefault设置为true, 按Enter键会使按钮变为 点击,除非明确焦点 带走了它。
但是在此示例窗口中
<Window xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="About WPF Unleashed" SizeToContent="WidthAndHeight"
Background="OrangeRed" >
<StackPanel>
<Label FontWeight="Bold" FontSize="20" Foreground="White">
WPF Unleashed (Version 3.0)
</Label>
<Label> 2006 SAMS Publishing</Label>
<Label>Installed Chapters:</Label>
<ListBox>
<ListBoxItem>Chapter 1</ListBoxItem>
<ListBoxItem>Chapter 2</ListBoxItem>
</ListBox>
<TextBox AcceptsReturn="False">HELLO TEXT</TextBox>
<RadioButton>HELLO RADIO BUTTON</RadioButton>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button IsCancel="True" MinWidth="75" Margin="10">Cancel</Button>
<Button x:Name="OKBUTTON" IsDefault="True" MinWidth="75" Margin="10">OK</Button>
</StackPanel>
<StatusBar>You have successfully registered this product.</StatusBar>
</StackPanel>
</Window>
如果按Enter或甚至单击它,模态窗口(按ShowDialog())不会被关闭(保留返回值)。 这是书中的错误吗?
答案 0 :(得分:1)
我认为这是一个错误。 IsDefault和IsCancel只是意味着在创建窗口时应用了一些access-key-magic,因此当你分别点击'Enter'和'ESC'时点击按钮。
如果您想关闭一个窗口 - 您需要: (来自MSDN) 当一个对话框被接受时,它应该返回一个true的对话框结果,这是通过在单击OK按钮时设置DialogResult属性来实现的。 ... 请注意,设置DialogResult属性也会导致窗口自动关闭,从而减少了显式调用Close的需要。