I'm having a problem with the default Button
in the xaml code below:
<Window x:Class="WebSiteMon.Results.Views.GraphicSizeSelectPopUp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:commonWPF="http://rubenhak.com/common/wpf"
xmlns:WPF="clr-namespace:Bennedik.Validation.Integration.WPF;assembly=Bennedik.Validation.Integration.WPF"
ResizeMode="NoResize"
WindowStyle="ThreeDBorderWindow"
SizeToContent="WidthAndHeight">
<Window.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="Red"
BorderThickness="2">
<AdornedElementPlaceholder />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError"
Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<WPF:ErrorProvider x:Name="UrlDataErrorProvider"
RulesetName="RuleSetA">
<Grid Background="{DynamicResource WindowBackgroundBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<RadioButton Grid.ColumnSpan="2"
Margin="10"
Name="radioButton1"
Content="640 x 480 pixels"
Command="{Binding SelectSizeRb}"
CommandParameter="640,480" />
<RadioButton Grid.ColumnSpan="2"
Margin="10"
Name="radioButton2"
Content="800 x 600 pixels"
Command="{Binding SelectSizeRb}"
CommandParameter="800,600"
Grid.Row="1"
IsChecked="True" />
<RadioButton Grid.ColumnSpan="2"
Margin="10"
Name="radioButton3"
Content="1024 x 768 pixels"
Command="{Binding SelectSizeRb}"
CommandParameter="1024,768"
Grid.Row="2" />
<RadioButton Grid.ColumnSpan="2"
Margin="10"
Name="radioButton4"
Command="{Binding SelectSizeRb}"
CommandParameter="0,0"
Grid.Row="3" />
<Button Grid.Column="1"
Grid.ColumnSpan="1"
Grid.Row="5"
Margin="5"
Name="BtnOk"
IsDefault="True">Ok</Button>
<Button Grid.Column="2"
Grid.ColumnSpan="1"
Grid.Row="5"
Margin="5"
Name="BtnCancel"
IsCancel="True">Cancel</Button>
</Grid>
</WPF:ErrorProvider>
</Window>
I call the above window using the following code:
var p = new GraphicSizeSelectPopUp();
var result = p.ShowDialog() ?? false;
p.Close();
I'm using this as a Popup
window in my application to get some info from the user. My problem is the when I click on the OK
button, nothing happens. The Cancel
button works exactly as expected, meaning that control returns in the calling program from the ShowDialog
method.
As I understand WPF (still newbie), all I have to do is set the IsDefault
property to true for the default button to do the same. However, this is not what I'm seeing. When I set a breakpoint on the line after the ShowDialog
method, it is not hit when I press the okay button. Only when I press the Cancel
button or close the window.
Suggestions for the uninformed?
Best Answer
The
IsDefault
property only means that this button is "clicked" when the ENTER key is pressed. It doesn't close the dialog, and doesn't set theDialogResult
, you have to do it manually in code-behind :(setting
DialogResult
also closes the window)