Skip to content

Instantly share code, notes, and snippets.

@yoshikazuendo
Last active April 20, 2021 06:43
Show Gist options
  • Save yoshikazuendo/e49e172728694210203bfb051ea182b1 to your computer and use it in GitHub Desktop.
Save yoshikazuendo/e49e172728694210203bfb051ea182b1 to your computer and use it in GitHub Desktop.
【WPF】【MVVM】MVVMでControlのFocusを指定する。
// Focus用behaviorを作ってあげて、それを利用するのが良さそう。
public static class FocusExtension
{
public static bool GetIsFocused(DependencyObject obj)
{
return (bool)obj.GetValue(IsFocusedProperty);
}
public static void SetIsFocused(DependencyObject obj, bool value)
{
obj.SetValue(IsFocusedProperty, value);
}
public static readonly DependencyProperty IsFocusedProperty =
DependencyProperty.RegisterAttached(
"IsFocused", typeof(bool), typeof(FocusExtension),
new UIPropertyMetadata(false, OnIsFocusedPropertyChanged));
private static void OnIsFocusedPropertyChanged(
DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
var uie = (UIElement)d;
if ((bool)e.NewValue)
{
uie.Focus();
}
}
}
<!-- usage -->
<!-- ViewModelにIsSelectedプロパティを用意してあげて、その値を変更することでbehaviorが走り、Focusが変わる。 -->
<TextBox my:FocusExtension.IsFocused="{Binding IsSelected}" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment