Merge pull request #495 from irihitech/numeric
Fix numeric family focus issue.
This commit is contained in:
@@ -17,29 +17,17 @@
|
||||
</Design.DataContext>
|
||||
|
||||
<Grid>
|
||||
<DataGrid ItemsSource="{Binding Items}" IsReadOnly="False" HorizontalAlignment="Left">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
|
||||
|
||||
<DataGridTemplateColumn Width="2*" Header="Address" MaxWidth="300" MinWidth="300">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Text="{Binding Address}" />
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
<DataGridTemplateColumn.CellEditingTemplate>
|
||||
<DataTemplate>
|
||||
<u:IPv4Box
|
||||
HorizontalAlignment="Stretch"
|
||||
IPAddress="{Binding Address}" />
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellEditingTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<u:Form>
|
||||
<u:FormItem Label="_Numeric">
|
||||
<u:NumericIntUpDown/>
|
||||
</u:FormItem>
|
||||
<u:FormItem Label="_AnotherNumeric">
|
||||
<u:NumericIntUpDown/>
|
||||
</u:FormItem>
|
||||
<u:FormItem Label="_TextBox">
|
||||
<TextBox/>
|
||||
</u:FormItem>
|
||||
</u:Form>
|
||||
</Grid>
|
||||
|
||||
</Window>
|
||||
|
||||
@@ -26,6 +26,7 @@ public abstract class NumericUpDown : TemplatedControl, IClearControl, IInnerCon
|
||||
protected ButtonSpinner? _spinner;
|
||||
protected TextBox? _textBox;
|
||||
protected internal Panel? _dragPanel;
|
||||
private bool _isFocused;
|
||||
|
||||
private Point? _point;
|
||||
protected internal bool _updateFromTextInput;
|
||||
@@ -149,6 +150,7 @@ public abstract class NumericUpDown : TemplatedControl, IClearControl, IInnerCon
|
||||
|
||||
static NumericUpDown()
|
||||
{
|
||||
FocusableProperty.OverrideDefaultValue<NumericUpDown>(true);
|
||||
NumberFormatProperty.Changed.AddClassHandler<NumericUpDown>((o, e) => o.OnFormatChange(e));
|
||||
FormatStringProperty.Changed.AddClassHandler<NumericUpDown>((o, e) => o.OnFormatChange(e));
|
||||
IsReadOnlyProperty.Changed.AddClassHandler<NumericUpDown, bool>((o, args) => o.OnIsReadOnlyChanged(args));
|
||||
@@ -216,6 +218,34 @@ public abstract class NumericUpDown : TemplatedControl, IClearControl, IInnerCon
|
||||
{
|
||||
_dragPanel.IsVisible = true;
|
||||
}
|
||||
FocusChanged(IsKeyboardFocusWithin);
|
||||
}
|
||||
|
||||
protected override void OnGotFocus(GotFocusEventArgs e)
|
||||
{
|
||||
base.OnGotFocus(e);
|
||||
FocusChanged(IsKeyboardFocusWithin);
|
||||
}
|
||||
|
||||
private void FocusChanged(bool hasFocus)
|
||||
{
|
||||
// The OnGotFocus & OnLostFocus are asynchronously and cannot
|
||||
// reliably tell you that have the focus. All they do is let you
|
||||
// know that the focus changed sometime in the past. To determine
|
||||
// if you currently have the focus you need to do consult the
|
||||
// FocusManager.
|
||||
|
||||
bool wasFocused = _isFocused;
|
||||
_isFocused = hasFocus;
|
||||
|
||||
if (hasFocus)
|
||||
{
|
||||
|
||||
if (!wasFocused && _textBox != null)
|
||||
{
|
||||
_textBox.Focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnKeyDown(KeyEventArgs e)
|
||||
|
||||
Reference in New Issue
Block a user