WPF Unleashed错误?

时间:2010-06-10 07:25:37

标签: wpf wpf-controls

这本书说

  

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())不会被关闭(保留返回值)。 这是书中的错误吗?

1 个答案:

答案 0 :(得分:1)

我认为这是一个错误。 IsDefault和IsCancel只是意味着在创建窗口时应用了一些access-key-magic,因此当你分别点击'Enter'和'ESC'时点击按钮。

如果您想关闭一个窗口 - 您需要: (来自MSDN) 当一个对话框被接受时,它应该返回一个true的对话框结果,这是通过在单击OK按钮时设置DialogResult属性来实现的。 ... 请注意,设置DialogResult属性也会导致窗口自动关闭,从而减少了显式调用Close的需要。